在 Oracle SQL 中使用 XML 兼容格式从 XML 提取值

Extractvalue from XML using XML compliant format in Oracle SQL

我有一个要求。我需要查询 table 并通过将转义字符转换为 XML 格式来显示列值 例如“&”到“&”

详情

我有table名字"AppName"

select NAME from AppName

NAME
---------
Oracle & Database

我需要做的是以 XML 兼容格式获取输出。像下面这样的东西 例如:

NAME
------
Oracle & Database

我已经使用 DBMS_XMLGEN 使其成为 XML 投诉并尝试使用 extractvalue 来获取值。但它 return 作为 "Oracle & Database"

下面是要转换为 XML 格式的查询

select SYS.DBMS_XMLGEN.getXML( 'select NAME from APPName ') XML_out from dual

"<?xml version="1.0"?>
 <ROWSET>
 <ROW>
  <NAME>Oracle &amp; Database<NAME>
  </ROW>
 </ROWSET>
 "

然后我尝试提取名称

select extractvalue( XMLType.createXML(SYS.DBMS_XMLGEN.getXML( 'select NAME from APPNAme' )),'/ROWSET/ROW/NAME') XML_out from dual

which return back the output same as "Oracle & Database"  
But i need output as "Oracle &amp; Database"

如何使用 DBMS_XMLGEN 获得此输出,或者有什么简单的方法。

非常感谢任何帮助

您所做的工作超出了您的需要; dbms_xmlgena convert() function,默认转义特殊字符(实体):

select dbms_xmlgen.convert(name) from appname;

DBMS_XMLGEN.CONVERT(NAME)                                                      
--------------------------------------------------------------------------------
Oracle &amp; Database                                                           

第二个参数默认为 ENTITY_ENCODE,您可以显式设置它(在普通 SQL 中使用基础值 0)来编码:

select dbms_xmlgen.convert('Oracle & Database', 0) from dual;

DBMS_XMLGEN.CONVERT('ORACLE&DATABASE',0)                                       
--------------------------------------------------------------------------------
Oracle &amp; Database                                                           

或对1(ENTITY_DECODE)做逆运算解码:

select dbms_xmlgen.convert('Oracle &amp; Database', 1) from dual;

DBMS_XMLGEN.CONVERT('ORACLE&AMP;DATABASE',1)                                   
--------------------------------------------------------------------------------
Oracle & Database                                                               

如果您已经有了 XMLType,或者出于某些其他原因想要使用该格式,您可以使用 XMLQuery 而不是 extractValue:

select xmlquery('/ROWSET/ROW/NAME/text()'
  passing XMLType.createXML(SYS.DBMS_XMLGEN.getXML('select name from appname'))
  returning content) XML_out from dual;

XML_OUT                                                                        
--------------------------------------------------------------------------------
Oracle &amp; Database

但在这种情况下,转换为 XML 有点毫无意义。