xmltype字符串缓冲区太小

时间:2014-04-12 07:28:18

标签: oracle xmltype

在我的存储过程中:

 declare
v_xml xmltype;
begin
open v_cur for
Select xmlelement('el',xmlagg(xmlelement('el2'))) from table;
loop
fetch v_cur into v_xml; -- line where the error 

*.....additional logic to parse v_xml*
end loop;
end;

当要提取到v_xml中的记录的长度大于>时,我收到“字符串缓冲区太小”错误。你们有什么想法如何解决这个问题吗?感谢

2 个答案:

答案 0 :(得分:2)

如果您使用xmlagg(),则必须将.getclobval()添加到周围的xmlelement(),因为xmlagg()上的字符数限制为4000。显然这意味着你将使用clobs而不是xmltype,但你别无选择,如果需要,你必须稍后转换回xmltype。示例如下:

declare
v_xml clob; -- Use CLOB
begin
open v_cur for
Select xmlelement("el",xmlagg(xmlelement("el2", tab_col))).getclobval() from table; -- add .getclobval()
loop
fetch v_cur into v_xml; -- line where the error 

*.....additional logic to parse v_xml*
end loop;
end;

答案 1 :(得分:0)

也许您使用的是旧的Oracle版本?过去有一些限制。对我而言,它适用于10 000 000行:

declare
    v_xml xmltype;
begin
    select xmlelement("el", xmlagg(xmlelement("el2")))
    into v_xml from (select 1 from dual connect by level <= 10000000);
end;