在PLSQL中解析带有名称空间的嵌套XML
我有一个如下所示的xml在PLSQL中解析带有名称空间的嵌套XML,sql,xml,oracle,xmltable,Sql,Xml,Oracle,Xmltable,我有一个如下所示的xml <ibm:dept bldg="123" xmlns:ibm="http://www.ibm.com/xmltable"> <ibm:employee id="144"> <ibm:name> <ibm:first>James</ibm:first> <ibm:last>Bond</ibm:last> </ibm:name>
<ibm:dept bldg="123" xmlns:ibm="http://www.ibm.com/xmltable">
<ibm:employee id="144">
<ibm:name>
<ibm:first>James</ibm:first>
<ibm:last>Bond</ibm:last>
</ibm:name>
<ibm:office>007</ibm:office>
<ibm:phone>905-007-1007</ibm:phone>
<ibm:salary currency="USD">77007</ibm:salary>
</ibm:employee>
</ibm:dept>'
然而,它的错误与下面的错误
ORA-19228: XPST0008 - undeclared identifier: prefix 'ibm' local-name 'ibm:name'
希望有人能解释这个错误。干杯
数据设置
create table xml_tab
(
id NUMBER,
xml_data XMLType
);
insert into xml_tab
values(3, XMLType.createXML('<ibm:dept bldg="123" xmlns:ibm="http://www.ibm.com/xmltable">
<ibm:employee id="144">
<ibm:name>
<ibm:first>James</ibm:first>
<ibm:last>Bond</ibm:last>
</ibm:name>
<ibm:office>007</ibm:office>
<ibm:phone>905-007-1007</ibm:phone>
<ibm:salary currency="USD">77007</ibm:salary>
</ibm:employee>
</ibm:dept>'));
createtablexml\u选项卡
(
身份证号码
xml_数据XMLType
);
插入xml_选项卡
值(3,XMLType.createXML('
詹姆斯
纽带
007
905-007-1007
77007
'));
如果要在列
子句的路径
表达式中使用限定名,则需要指定XMLNAMESPACES
子句()
因此,即使对于第二个XMLTable
(别名可能会更改,例如第二个表的ibm2
,方法是将所有ibm:
替换为ibm2:
):
如果要在
列
子句的路径
表达式中使用限定名,则需要指定xmlnamespace
子句()
因此,即使对于第二个XMLTable
(别名可能会更改,例如第二个表的ibm2
,方法是将所有ibm:
替换为ibm2:
):
create table xml_tab
(
id NUMBER,
xml_data XMLType
);
insert into xml_tab
values(3, XMLType.createXML('<ibm:dept bldg="123" xmlns:ibm="http://www.ibm.com/xmltable">
<ibm:employee id="144">
<ibm:name>
<ibm:first>James</ibm:first>
<ibm:last>Bond</ibm:last>
</ibm:name>
<ibm:office>007</ibm:office>
<ibm:phone>905-007-1007</ibm:phone>
<ibm:salary currency="USD">77007</ibm:salary>
</ibm:employee>
</ibm:dept>'));
select x.*, y.*
from xml_tab t,
XMLTable(XMLnamespaces('http://www.ibm.com/xmltable' as "ibm"),
'ibm:dept/ibm:employee' passing t.xml_data columns empid
NUMBER path '@id',
office VARCHAR2(5) path 'ibm:office',
name XMLTYPE path 'ibm:name') x,
XMLTable(XMLnamespaces('http://www.ibm.com/xmltable' as "ibm"),
'ibm:name' passing x.name columns firstname VARCHAR2(10) path
'ibm:first',
lastname VARCHAR2(10) path 'ibm:last') y
where t.id = 3;