【发布时间】:2014-10-07 07:20:09
【问题描述】:
上下文
为生成 XML 而创建的一些 PL/SQL 包抛出此错误:
ORA-31061: Erreur XDB : special char to escaped char conversion failed.
发生此错误是因为在 xmlelement 中选择的某些文本包含不允许的控制字符。
解决方案
用正则表达式替换每个 xmlelement 的所有控制字符:
xmlelement("foo", REGEXP_REPLACE (bar, '[[:cntrl:]]', ''))
解决方案有问题
我有 8 个包,每个包大约 5k 行,其中几乎每一行都是一个 xmlelement。
其他可能的解决方案
我认为我可以编写一个正则表达式来自动替换每个 xmlelement 的值,但是当我在 xmlelement 中包含带有子查询和子子查询等的 xmlelement 时,它会失败。
我的问题
有没有更聪明的方法,然后一个一个地替换每个 xmlelement 的值?我被要求做每个包的所有 xmlelement 以防止进一步的错误,但我确信有更好的方法来做到这一点。
编辑
例如,您可以使用此查询重现错误:
select xmlelement("foo", unistr('\0013b')) from dual;
我会使用这个查询来修复它:
select xmlelement("foo", regexp_replace(unistr('\0013b'), '[[:cntrl:]]', '')) from dual;
【问题讨论】:
-
我不确定如何帮助您,但请查看此页面 community.oracle.com/thread/595376?tstart=0。希望能给大家一些启示