“ORA-22922: 不存在的 LOB 值”有时和ORA-01790一起出来,01790是说类型不一致,常见的有wm_concat函数,高版本的Oracle都不再支持wm_concat,wm_concat生成的值的类型是hugeclob,如果与union连用,导致类型可能不一致而报错,因此,解决ORA-01790类型不一致,简单点就是就是加to_char,如to_char(wm_concat(...))。但如wm_concat与distinct连用时后面的值里有空值,就会报ORA-22922,一种解决方法是在wm_concat得出值后,再嵌套一层用to_char,类下:
select to_char(a)
from
(select wm_concat(distinct b) a from ...))
另一种有人说是把to_char加在内层,如wm_concat(to_char(a)),这种应该对加distinct的无用,我用了照样报错,最终我是换了listagg,只是listagg不能去重,如果要用listagg去重,简单的说就是先用distinct去完重,再用listagg合并转行。还有其他listagg的去重方法,这里就不多说了。
>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/2187.html