使用 XMLELEMENT Oracle 时如何替换 ' 或任何特殊字符

Posted

技术标签:

【中文标题】使用 XMLELEMENT Oracle 时如何替换 \' 或任何特殊字符【英文标题】:How to replace ' or any special character in when using XMLELEMENT Oracle使用 XMLELEMENT Oracle 时如何替换 ' 或任何特殊字符 【发布时间】:2014-06-15 16:20:35 【问题描述】:

我有以下查询。如何保持撇号 (') 完整且不被 &apos 替换 我还想处理其他字符,例如&

SELECT RTRIM(XMLAGG(XMLELEMENT(E,'I''m'||':')).EXTRACT('//text()'),':')
  FROM dual;

输出:

I'm

谢谢。

【问题讨论】:

【参考方案1】:

您可以特别使用utl_i18n 包和unescape_reference() 函数。这是一个例子:

clear screen;
column res format a7;

select utl_i18n.unescape_reference(
          rtrim(
               xmlagg( -- use of xmlagg() function in 
                       -- this situation seems to be unnecessary 
                       XMLELEMENT(E,'I''m'||':')
                      ).extract('//text()'),':'
                )
        ) as res
 from dual;

结果:

RES   
-------
I'm  

【讨论】:

这个有4000个字符的限制 @Skoffer 是的。为了克服这个限制dbms_xmlgen 包,特别是convert() 函数can be used 这有帮助。谢谢。【参考方案2】:
SELECT dbms_xmlgen.convert( xmlagg(XMLELEMENT(E,'I''m'
  ||':')).extract('//text()').getclobval() ,1)
FROM dual;

我是:

【讨论】:

非常感谢!它也很不错,但它在 HUGECLOB 中获得了输出

以上是关于使用 XMLELEMENT Oracle 时如何替换 ' 或任何特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

oracle xml操作

Oracle 在 IN 子句中使用子查询降低性能

如何删除 XmlElement ? (XmlNode 与 XmlElement)

如何使用 JAXB 创建没有价值的 XmlElement

ORACLE,XMLAGG(arg),空 arg

如何使用Hibernate使用@XmlElement访问子元素