oracle使用wm_concat() 獲取行之後,打開報錯,CLOB類型,以及替代方案

獲取兩個表的公共字段,使用了wm_concat() 函數,但是打開行的時候報錯,因爲是clob的類型。

解決方法:
1、 使用to_char函數,轉成字符類型:

select to_char(wm_concat(COLUMN_NAME)) from all_tab_columns a where a.TABLE_NAME=‘表名1’ and a.OWNER=‘本地用戶1’
AND exists(select 1 from all_tab_columns@dj b where b.TABLE_NAME=‘表名2’ and b.OWNER=‘本地用戶2’
AND A.COLUMN_NAME=B.COLUMN_NAME) GROUP BY A.TABLE_NAME;

2、使用LISTAGG分析函數(11g Release 2),允許我們使用指定連接字符串:
逗號分隔:

select listagg(COLUMN_NAME, ‘,’) within group (order by COLUMN_NAME) as 列名 from all_tab_columns a where a.TABLE_NAME=‘表名1’ and a.OWNER=‘本地用戶1’
AND exists(select 1 from all_tab_columns@dj b where b.TABLE_NAME=‘表名2’ and b.OWNER=‘本地用戶2’
AND A.COLUMN_NAME=B.COLUMN_NAME) GROUP BY A.TABLE_NAME;

橫槓分隔:

select listagg(COLUMN_NAME, ‘-’) within group (order by COLUMN_NAME) as 列名 from all_tab_columns a where a.TABLE_NAME=‘表名1’ and a.OWNER=‘本地用戶1’
AND exists(select 1 from all_tab_columns@dj b where b.TABLE_NAME=‘表名2’ and b.OWNER=‘本地用戶2’
AND A.COLUMN_NAME=B.COLUMN_NAME) GROUP BY A.TABLE_NAME;

需要注意的是 wm_concat()函數有些版本不支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章