You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle 11g升级12c后不支持的函数清单咨询

Oracle 11g 支持但 12c 不再推荐/弃用的函数清单及替代方案

我之前从Oracle 11g升级到12c的时候,也踩过类似的坑——WM_CONCAT突然不能用了,折腾了好一阵才换成LISTAGG。整理了一份11g支持但12c里被弃用或者不再推荐的函数/工具包清单,还有对应的替代方案,应该能帮到你:

  • WM_CONCAT:这个你已经碰到了,12c里官方直接弃用了这个非标准聚合函数,替代方案是使用Oracle标准的LISTAGG()函数,用法更灵活还支持排序:

    -- 11g中WM_CONCAT的用法
    SELECT dept_id, WM_CONCAT(emp_name) AS emp_list 
    FROM employees 
    GROUP BY dept_id;
    
    -- 12c中LISTAGG的替代写法
    SELECT dept_id, LISTAGG(emp_name, ', ') WITHIN GROUP (ORDER BY emp_name) AS emp_list 
    FROM employees 
    GROUP BY dept_id;
    

    另外12cR2及以上版本的LISTAGG还支持ON OVERFLOW TRUNCATE子句,能处理拼接字符串过长的问题,比WM_CONCAT实用多了。

  • DBMS_OBFUSCATION_TOOLKIT:这个加密工具包在12c中被标记为弃用,官方推荐用功能更全面的DBMS_CRYPTO包替代,它支持更多加密算法(比如AES-256),还提供了更安全的API设计。

  • XMLSEQUENCE函数:12c中弃用了这个XML处理函数,替代方案是使用XMLTABLE函数,语法更清晰,处理XML数据的效率也更高:

    -- 11g中XMLSEQUENCE的用法
    SELECT EXTRACT(value(x), '/emp/name/text()').getStringVal() AS emp_name
    FROM TABLE(XMLSEQUENCE(EXTRACT(xml_doc, '/emps/emp'))) x;
    
    -- 12c中XMLTABLE的替代写法
    SELECT emp_name
    FROM XMLTABLE('/emps/emp' PASSING xml_doc
                  COLUMNS emp_name VARCHAR2(50) PATH '/emp/name');
    
  • UTL_SMTP的旧版API:比如UTL_SMTP.OPEN_CONNECTION的部分重载版本,12c里推荐使用UTL_SMTP.CONNECT替代,新版API更好地支持TLS/SSL加密连接,安全性更高。

  • USER_DEPENDENCIES的旧字段关联:虽然这不是函数,但12c中移除了USER_DEPENDENCIES里部分旧字段的关联逻辑,如果你之前依赖这个视图获取对象依赖关系,建议改用ALL_DEPENDENCIES/DBA_DEPENDENCIES的新结构,或者使用DBMS_UTILITY.GET_DEPENDENCY存储过程来获取更准确的依赖信息。

额外提醒:有些函数只是被弃用而非彻底移除(12c中暂时还能运行,但官方明确不推荐),为了后续版本的兼容性,建议尽早替换成官方推荐的方案。

内容的提问来源于stack exchange,提问作者Murali krishna Konduru

火山引擎 最新活动