原來,wm_concat函數在10G返回的是字符串,到了11G返回的是LOB類型,在程序裏面是使用字符串類型,導致了問題的出現:
假設有視圖A,A視圖有id和name字段
10G版的SQL:
select wmsys.wm_concat(distinct(a.name) from A a 沒問題
網上大部分的答案的SQL:
select to_char(wmsys.wm_concat(distinct(a.name)) from A a 有問題
如果這個視圖的字段都有值,不會報錯。當name爲空是,java程序一樣會報“ORA-22922: 不存在的 LOB 值”
這時候應該選擇使用listagg函數去替換wmsys.wm_concat函數
select listagg(a.name,',' ) within GROUP (order by (a.name)) from A a
這樣,爲空的字段則會是字符串類型了。
————————————————
版權聲明:本文爲CSDN博主「小明哥哥的哥哥」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq1021623362/article/details/79033588