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




