在我的存储过程中:
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中的记录的长度大于>时,我收到“字符串缓冲区太小”错误。你们有什么想法如何解决这个问题吗?感谢
答案 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;