gpt4 book ai didi

regex - 替换 xmlelement 中的控制字符

转载 作者:行者123 更新时间:2023-12-01 03:48:10 26 4
gpt4 key购买 nike

语境

为生成 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;

最佳答案

我不认为这正是您想要的,但是可以使用 dbms_xmlgen 为您的查询生成 xml 而不会出错。下面是一个例子:

declare
xml_output CLOB;
my_context dbms_xmlgen.ctxHandle;
begin
my_context := dbms_xmlgen.newcontext('select unistr (''\0013b'') from dual');
xml_output := dbms_xmlgen.getxml(my_context);
dbms_xmlgen.closecontext(my_context);
dbms_output.put_line(xml_output);
end;

关于regex - 替换 xmlelement 中的控制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com