Dav*_*ave 2 xml oracle control-characters
我对Oracle XDB完全陌生,特别是使用它来从数据库表生成XML输出,并且正在开发从9i(Oracle9i企业版9.2.0.5.0版-生产)到11g(Oracle)的应用程序数据库11g企业版11.2.0.2.0版-64位生产)。这是一个小的测试用例,它说明了我遇到的问题:
select xmlelement("test", test) from (select 'a' test from dual);
Run Code Online (Sandbox Code Playgroud)
这有效并给我:
<test>a</test>
Run Code Online (Sandbox Code Playgroud)
但是在11g中,如果我将'a'换成无效字符(例如U + 0013),则会出现以下错误:
ORA-31061: XDB error: special char to escaped char conversion failed.
Run Code Online (Sandbox Code Playgroud)
在9i下,同一件事可以成功运行,没有错误。
显然,理想的答案是进行适当的验证,以防止控制字符进入我要转换为XML的简单字符数据中,但是不幸的是,这超出了我的工作范围。
这是其他任何人都经历过的吗?如果是,我可以对我的XML生成脚本进行简单的更改吗?还是需要进行其他某种清理?或者只是在极少数情况下手动解决问题(对于我的需求,这将是一个非常合理的选择)。
非常感谢。
小智 5
虽然始终将数据固定在源头是最好的解决方案,但我也发现在无法控制源头数据的情况下这很有用:
select xmlelement("test", test) from (select regexp_replace(unistr('a\0013b'), '[[:cntrl:]]', '') test from dual);
重要的是regexp_replace(your_field,'[[:cntrl ::]]',''),用于从数据中删除控制字符。
| 归档时间: |
|
| 查看次数: |
15263 次 |
| 最近记录: |