XML/SQL 查询问题



问题

编写 SQL 命令以创建表书历史记录。该表应具有用于存储字符串并作为主键的标题列,以及 XMLType 类型的 bookDetails 列。编写第二个 SQL 命令来选择标题,并从 bookDetails中选择 XML 节点"/author/phoneNumber",其中 XML 节点"/author/surname"是"Chan"。

回答/尝试

CREATE TABLE BookHistory(
title varchar(20) PRIMARY KEY,
bookDetails XMLType);
SELECT title, XMLQuery(/author/telephoneNumber/text()
PASSING bookDetails RETURNING CONTENT)
FROM BookHistory
WHERE extractValue(bookDetails,'/author/surName') = 'Chan';

错误ORA-00936:缺少表达式

有人可以解释我做错了什么吗? 这是我第一次做XML/SQL。

你的XMLQuery()的第一个参数,XQuery_string,需要引用:

SELECT title, XMLQuery('/author/telephoneNumber/text()' as telephoneNumber
PASSING bookDetails RETURNING CONTENT)
FROM BookHistory
WHERE extractValue(bookDetails,'/author/surName') = 'Chan';

这摆脱了你的错误;我认为它给出了你想要的结果......但作为一个XMLType仍然。

您也可以这样做:

SELECT title,
extractValue(bookDetails, '/author/telephoneNumber') as telephoneNumber
FROM BookHistory
WHERE extractValue(bookDetails,'/author/surName') = 'Chan';

第二个版本的SQL Fiddle;第一个版本没有错误,但由于某种原因在该环境中没有返回,但是在11.2.0.3下两者都运行良好,并给出相同的结果;带有示例数据:

insert into bookhistory values ('Some title',
XMLType('
<author>
<surName>Chan</surName>
<telephoneNumber>1234</telephoneNumber>
</author>
'));
insert into bookhistory values ('Another book',
XMLType('
<author>
<surName>Segal</surName>
<telephoneNumber>5678</telephoneNumber>
</author>
'));

两者都给出:

TITLE                TELEPHONENUMBER
-------------------- --------------------
Some title           1234

但是第一个版本返回一个XMLType,它在SQL*Plus中显示,但在SQLDeveloper中不显示;你应该真正得到实际的文本值:

SELECT title, XMLQuery('/author/telephoneNumber/text()'
PASSING bookDetails RETURNING CONTENT).getStringVal() as telephoneNumber
FROM BookHistory
WHERE extractValue(bookDetails,'/author/surName') = 'Chan';
TITLE                TELEPHONENUMBER    
-------------------- --------------------
Some title           1234                 

两个工作版本的SQL小提琴。

最新更新