1、开发中遇到的奇怪问题,ORACLE写个SQL语句,在plsql中查询没问题,在中调用会报如
上错误,查了一些资料,没看太明白,只是说WM_CONCAT()函数和group by、
distinct、union关键字联合使用时,会有这个问题。先记录下解决方案。
把wm_concat(字段)换成listagg(字段)within group(order by(字段));
2、数据了多了,使用这个wm_concat也会报错,建议使用换成listagg(字段)within group(order by(字段)),这是listagg这个不能去重,wm_concat(字段)=》to_char(wm_concat(DISTINCT TO_CHAR(字段))) 可以去重。
SQL的伪代码:
原SQL(有问题):
SELECT T.*, B.name
FROM A
LEFT JOIN (SELECT T.x,TO_CHAR(WM_CONCAT(T.name)) name
FROM T
GROUP BY x) B
ON A.x= B.x
修改后的:
SELECT T.*, to_char(B.name)
FROM A
LEFT JOIN (SELECT T.x,
listagg(T.name,',')within group(order by(T.name))T.name
FROM T
GROUP BY x) B
ON A.x = B.x