【问题标题】:How to replace ' or any special character in when using XMLELEMENT Oracle使用 XMLELEMENT Oracle 时如何替换 ' 或任何特殊字符
【发布时间】:2025-12-17 00:55:02
【问题描述】:

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

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

输出:

I'm

谢谢。

【问题讨论】:

    标签: sql xml oracle replace xmlelement


    【解决方案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 中获得了输出