WM CONCAT字元超過4000的處理辦法

2022-07-12 17:18:26 字數 2957 閱讀 1309

參考**:

字串拼接技巧和方式:

在進行使用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

begin

2for idx in

1 .. 10000

loop

3insert

into ts1 (tm) values

(sys_guid());

4end

loop;

5end;

測試的sql語句:

1

select tab2clob(cast(collect(tm) as

str2tbltype)) attributes

2from

ts13

where rownum <

1000

注意:如下的sql語句錯誤:由於型別不同

1

select sys_util.tab2clob(cast(collect(deptno) as

str2tbltype))

2from (select

distinct deptno from emp)

會丟擲如下的異常資訊:

因為在str2tbltype中宣告的是varchar2,但是現在deptno是數字,所以資料型別會發生不一致,所以,可以使用to_char見其進行轉換,來避免上述的錯誤:

1

select sys_util.tab2clob(cast(collect(to_char(deptno)) as

str2tbltype))

2from (select

distinct deptno from emp)

二:使用oracle的sql提供的處理xml的語句:xmlagg()

sql語句如下:

1

select

rtrim(xmlagg(xmlparse(content ename ||',

' wellformed) order

byename)

2.getclobval(),3'

,') attributes,

4deptno

5from

emp6

group

by deptno;

結果:

具體:

或者使用如下的語句,可以實現同樣的功能:

參考**:

1

select

deptno,

2 trim(xmlagg(xmlelement(content, ename ||',

' ) order

byename)

3 .extract('

//text()

').getclobval())4as

concatenated

5from

emp6

group

by deptno;

下面的語句,沒有呼叫getclobval(),聚合的結果集是字串

關於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...