XMLQuery в Oracle для запроса XML - PullRequest
0 голосов
/ 19 октября 2019

Я новичок в 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>')
);

То, что я пытался ...

select person_id,
       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 ) XMLData
from person_data t;

Но это не удается с ошибкой

ORA-30625: отправка метода по аргументу NULL SELF запрещена

Не можете понять, почему? Также, если вы знаете хороший учебник по XMlQuery, укажите мне на это.
Примечание: я уже просмотрел документацию.

1 Ответ

1 голос
/ 20 октября 2019

Я подозреваю, что вы сталкиваетесь с ошибкой в ​​LiveSQL.

Если мы возьмем ваш запрос и поместим ваш вызов в XMLQuery в NVL, который заменяет фиктивный документ в нулевом регистре,мы получаем лучший результат. Этот запрос успешно возвращается, подставляя в фиктивный документ случай, когда условие не совпадает:

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;

Кажется, что есть и другие ошибки в LiveSQL: если вы берете псевдоним столбца XMLDataесли исходить из вышеприведенного запроса, вывод будет поврежден.

...