最近咨询组人员反馈现场数据库升级到11g后,报函数找不到 ORA-00904: "wm_concat":invalid 查文档发现 wm_concat函数已不被oracle 推荐使用,该函数是在8i版本引入,主要功能是行列转换 ,具体用法、功能我就不介绍了,见验证语句微笑。虽然oracle不推荐使用,主要原因是bug多,但创建脚本还是保留着,地址在$ORACLE_HOME/RDBMS/ADMIN/ 目录下
请用 as sysdba 登录执行
owmctab.plb (主要功能创建用户,如果WMSYS可以省略执行) 、
owmaggrs.plb (数据类型之类的)、
owmaggrb.plb (包体函数之类的)
注意按顺序执行,如果不确定也可以执行多次,报错请忽略。
执行完毕后随便验证下:
select wm_concat(a.OWNER ) from dba_objects a where rownum < 19;
不报错就ok了,注意该函数返回的数据类型是clob 未超过4000 可以用to_char转换。
虽然oracle已不推荐使用,但它还是推出了性能和效率更高的函数来替代他 listagg
语法
我看了下文档举个例子吧SELECT LISTAGG(last_name, '; ')
WITHIN GROUP (ORDER BY hire_date, last_name) "Emp_list",
MIN(hire_date) "Earliest"
FROM employees
WHERE department_id = 30;
Emp_list Earliest
-
Raphaely; Khoo; Tobias; Baida; Himuro; Colmenares 07-DEC-02
这里是用分号(;)分割,当然你也可以用其它字符替代 比如上面替换函数(wm_concat)使用的逗号(,)而且只能用逗号(,),看到了吧,是不是强了那么一丢丢。性能这里就不讨论了。完