Sql 在Oracle中使用XMLQuery查询XML

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

我是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/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;