在 pl/sql 上创建大 xml
Posted
技术标签:
【中文标题】在 pl/sql 上创建大 xml【英文标题】:Create big xml on pl/sql 【发布时间】:2018-12-15 10:40:49 【问题描述】:我尝试创建我的 xml 文本:
SELECT XMLELEMENT(
"firms",
XMLAGG(
XMLELEMENT(
"firm",c
XMLELEMENT("FirmID", wo.id),
XMLELEMENT("Name", substr(wo.namerus, 1, 120)),
XMLELEMENT("ShortName", wo.code)
)
)
)
INTO my_var
FROM organs wo
WHERE type_id = 5;
dbms_output.put_line(my_var.GetClobVal());
然后我得到一个错误:
ORA-06502:PL/SQL:数字或值错误
我知道我的数据是正确的,因为如果我将第一列翻倍三次或更多次,我会再次收到此错误。我怎样才能创建一个大的 xml?
【问题讨论】:
MY_VAR 的数据类型是什么?你试过 CLOB 了吗? my_var XMLType; Clob - 你的意思是在 Clob 变量中创建一个长字符串? CLOB 应该足够大。也许是 DBMS_OUTPUT.PUT_LINE 引发错误,而不是 SELECT 本身。如果是这样——那又如何?不要输出它,而是做任何你想做的事情。 【参考方案1】:错误很可能不是在您创建 XML 时出现,而是在您尝试打印它时出现:
dbms_output.put_line(my_var.GetClobVal());
dbms_output.put_line
存在一些限制,在处理大数据时会导致问题:即,大于 32k 的 clob 确实无法以这种方式打印,并出现错误 ORA-06502。
如果您实际上不需要打印 clob,只需注释掉该行就可以了。
否则,请查看this *** post,它提供了一种基于迭代 clob 并一次打印出一个较小块的过程的解决方案。
【讨论】:
否...一些错误字符串显示给我的选择,而不是输出。 @Darya 好的,那么您能否发布您的整个脚本,包括变量声明和完整的错误消息,包括行号? 您是否真的尝试评论打印变量的行?以上是关于在 pl/sql 上创建大 xml的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 11g 代码上的 PL/SQL 是在执行存储过程时
如何在 Oracle PL/SQL 上创建可以捕获 DUP_VAL_ON_INDEX 的前触发器或后触发器
如何在不修改数据库模式的情况下仅使用 PL/SQL 更新具有大值的 CLOB?