參考**:
字串拼接技巧和方式:
在進行使用wm_concat或者自定義的聚合函式,進行拼串的時候,可能遇到拼串形成的結果集大於4000,這時候,系統會提示,超過系統限制。所以,在這個時候,最好的處理辦法就是將結果集處理成clob格式,
下面共有兩種處理方式:
1、使用函式
型別:
1函式:create
orreplace type str2tbltype as
table
ofvarchar2(4000)
1測試:初始化資料:create
orreplace
function
tab2clob(p_str2tbltype str2tbltype,
2 p_delim in
varchar2
default',
') return clob is
3l_result clob;
4begin
5for cc in (select
column_value
6from
table
(p_str2tbltype)
7order
bycolumn_value) loop
8 l_result := l_result || p_delim ||
cc.column_value;
9end
loop;
10return
ltrim
(l_result, p_delim);
11end;
1測試的sql語句:begin
2for idx in
1 .. 10000
loop
3insert
into ts1 (tm) values
(sys_guid());
4end
loop;
5end;
1注意:如下的sql語句錯誤:由於型別不同select tab2clob(cast(collect(tm) as
str2tbltype)) attributes
2from
ts13
where rownum <
1000
1會丟擲如下的異常資訊:select sys_util.tab2clob(cast(collect(deptno) as
str2tbltype))
2from (select
distinct deptno from emp)
因為在str2tbltype中宣告的是varchar2,但是現在deptno是數字,所以資料型別會發生不一致,所以,可以使用to_char見其進行轉換,來避免上述的錯誤:
1二:使用oracle的sql提供的處理xml的語句:xmlagg()select sys_util.tab2clob(cast(collect(to_char(deptno)) as
str2tbltype))
2from (select
distinct deptno from emp)
sql語句如下:
1結果:select
rtrim(xmlagg(xmlparse(content ename ||',
' wellformed) order
byename)
2.getclobval(),3'
,') attributes,
4deptno
5from
emp6
group
by deptno;
具體:
或者使用如下的語句,可以實現同樣的功能:
參考**:
1下面的語句,沒有呼叫getclobval(),聚合的結果集是字串select
deptno,
2 trim(xmlagg(xmlelement(content, ename ||',
' ) order
byename)
3 .extract('
//text()
').getclobval())4as
concatenated
5from
emp6
group
by deptno;
關於oracle中xml的知識,請參考:
或者
WM CONCAT字元超過4000的處理辦法
參考 字串拼接技巧和方式 在進行使用wm concat或者自定義的聚合函式,進行拼串的時候,可能遇到拼串形成的結果集大於4000,這時候,系統會提示,超過系統限制。所以,在這個時候,最好的處理辦法就是將結果集處理成clob格式,下面共有兩種處理方式 1 使用函式 型別 1 create or rep...
WM CONCAT字元超過4000的處理辦法
參考 字串拼接技巧和方式 在進行使用wm concat或者自定義的聚合函式,進行拼串的時候,可能遇到拼串形成的結果集大於4000,這時候,系統會提示,超過系統限制。所以,在這個時候,最好的處理辦法就是將結果集處理成clob格式,下面共有兩種處理方式 1 使用函式 型別 1 create or rep...
wm concat 多行字串拼接
一 wm concat 多行字串拼接 有如下員工部門表emp dept,資料如下 需要實現如下結果 就需要用到wm concat 函式 sql如下 select dept name 部門,wm concat t.emp name 員工 from emp dept t group by dept na...