3

我想在我的输出中显示特殊符号。例如:我的文本可能包含实体代码,如&lt;, &gt; 等我想在我的输出中显示为<, 。>我需要在 SQL 中执行此操作。我用谷歌搜索了这个并得到了一个功能,

select dbms_xmlgen.convert('ABC <; ',0) from dual

这执行相反的过程,它生成输出为'ABC <'

我尝试解码,但它不起作用。我什至将 sql 命令更改为 select dbms_xmlgen.convert('ABC <; ',1) from dual,其中 1 表示entity_decode,但我没有得到所需的输出。

4

2 回答 2

8

我没有使用 DBMS_XMLGEN.convert,而是使用了函数 UTL_I18N.UNESCAPE_REFERENCE:

SELECT UTL_I18N.UNESCAPE_REFERENCE('ABC &lt; ') FROM DUAL;

结果:

ABC < 

有关 Oracle 文档的更多信息:http: //docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_i18n.htm#i998992

于 2016-02-16T21:40:40.623 回答
2

尝试类似:

SELECT DBMS_XMLGEN.CONVERT('ABC &lt; ', DBMS_XMLGEN.ENTITY_DECODE) FROM DUAL

此外,请参阅Oracle 文档

编辑:

好的,显然这是某些 Oracle 版本(看起来是 9.2.0.1 和 10.1.0.2)中的一个错误。有人通过包装函数来解决它。我不知道应该如何解决它,但我值得一试。创建一个这样的函数:

CREATE OR REPLACE FUNCTION
   xml_decode(
      i_xml_string IN VARCHAR2
   )
   RETURN VARCHAR2
IS
BEGIN
   RETURN
      DBMS_XMLGEN.convert(
         i_xml_string,
         DBMS_XMLGEN.ENTITY_DECODE
      );
END;

并改用它:

SELECT xml_decode('ABC &lt; ') FROM DUAL;

让我们知道这是否有效。

于 2013-07-05T09:25:59.960 回答