Sql 在Oracle中使用XMLQuery查询XML
我是XLQuery新手,正在尝试一个基本命令-Sql 在Oracle中使用XMLQuery查询XML,sql,oracle,xquery,qxmlquery,Sql,Oracle,Xquery,Qxmlquery,我是XLQuery新手,正在尝试一个基本命令- CREATE TABLE person_data ( person_id NUMBER(3), person_data XMLTYPE ); INSERT INTO person_data (person_id, person_data) VALUES (1, XMLTYPE(' <PDRecord> <PDName>Daniel Morgan</PDName> <PDDOB>12
CREATE TABLE person_data (
person_id NUMBER(3),
person_data XMLTYPE
);
INSERT INTO person_data
(person_id, person_data)
VALUES
(1, XMLTYPE('
<PDRecord>
<PDName>Daniel Morgan</PDName>
<PDDOB>12/1/1951</PDDOB>
<PDEmail>damorgan@u.washington.edu</PDEmail>
</PDRecord>')
);
INSERT INTO person_data
(person_id, person_data)
VALUES
(2, XMLTYPE('
<PDRecord>
<PDName>Jack Cline</PDName>
<PDDOB>5/17/1949</PDDOB>
<PDEmail>damorgan@u.washington.edu</PDEmail>
</PDRecord>')
);
INSERT INTO person_data
(person_id, person_data)
VALUES
(3, XMLTYPE('
<PDRecord>
<PDName>Caleb Small</PDName>
<PDDOB>1/1/1960</PDDOB>
<PDEmail>damorgan@u.washington.edu</PDEmail>
</PDRecord>')
);
但这是错误的
ORA-30625:不允许对NULL自参数进行方法分派
不明白为什么?另外,如果您知道一些关于XMlQuery的好教程,请告诉我。注意:我已经浏览了文档。我怀疑您遇到的是LiveSQL中的一个bug 如果我们接受您的查询并将您对
XMLQuery
的调用包装在NVL
中,它将在null情况下替换一个伪文档,我们将获得更好的输出。此查询成功返回,如果条件不匹配,则替换虚拟文档:
select person_id,
NVL(XMLQuery('for $i in /PDRecord where $i/PDName = "Jack Cline" order by $i/PDName return $i/PDName'
passing by value t.person_data
RETURNING CONTENT), XMLTYPE('<empty/>')) XMLData
from person_data t;
选择人员id,
NVL(XMLQuery('for$i in/PDRecord,其中$i/PDName=“Jack Cline”order by$i/PDName返回$i/PDName'
按值传递t.person\u数据
返回内容),XMLTYPE(“”))XMLData
来自个人数据t;
LiveSQL中似乎还有其他错误:如果您从上面的查询中删除
XMLData
列别名,则输出会损坏。对不起,我无法用您提供的数据和查询重现此错误。我得到了预期的结果。(我在Oracle XE 18c上运行这个。)@LukeWoodward我在Oracle的Live SQL上运行它。
select person_id,
NVL(XMLQuery('for $i in /PDRecord where $i/PDName = "Jack Cline" order by $i/PDName return $i/PDName'
passing by value t.person_data
RETURNING CONTENT), XMLTYPE('<empty/>')) XMLData
from person_data t;