Oracle变量在select语句中转义

时间:2017-10-26 15:38:00

标签: sql xml oracle variables

我正在尝试使用变量来使用Oracle检索XML,这是XML:

<data type="TestType" version="1">
  <MasterTable Name="TestMaster"/>
  <Table Name="Test1">
    <test id="1">testText</test>
  </Table>
  <Table Name="TestTable1"/>
  <Table Name="TestTable2"/>
  <Table Name="TestTable3"/>
  <Table Name="TestTable4"/>
  <Table Name="TestTable5"/>
  <Table Name="TestTable6"/>
  <Table Name="TestTable7"/>
  <Table Name="TestTable8"/>
  <Table Name="TestTable9"/>
  <Table Name="TestTable10"/>
  <Table Name="TestTable11"/>
  <Table Name="TestTable12"/>
  <Table Name="TestTable13"/>
</data>

我有以下SQL:

declare
SEARCH_NODE nvarchar2(50) :='data' ;
NODE_NO nvarchar2(50) :='1' ;
DISPLAY nvarchar2(50) :='@version' ;
V_XML_RETRIEVED nvarchar2(50) ;

BEGIN
    SELECT a.XML.EXTRACT('//'||SEARCH_NODE||'['||NODE_NO||']/'||DISPLAY||'').GETSTRINGVAL() into V_XML_RETRIEVED FROM test_table a ;
    DBMS_OUTPUT.PUT_LINE(V_XML_RETRIEVED);
END;

这会引发以下错误:

Error report -
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00601: Invalid token in: ''
ORA-06512: at line 8
31011. 00000 -  "XML parsing failed"
*Cause:    XML parser returned an error while trying to parse the document.
*Action:   Check if the document to be parsed is valid.

我认为这可能与转义字符有关,但无法弄清楚它应该是什么!

下面的确有效,但没有变量:

declare
V_XML_RETRIEVED nvarchar2(50) ;

BEGIN
    SELECT a.XML.EXTRACT('//data[1]/@version').GETSTRINGVAL() into V_XML_RETRIEVED FROM test_table a ;
    DBMS_OUTPUT.PUT_LINE(V_XML_RETRIEVED); -- returns version "1"
END;

0 个答案:

没有答案