我正在尝试使用变量来使用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;