ORA-19100:预期的PASSING或RETURNING关键字

时间:2018-03-28 15:18:53

标签: xml oracle xquery

我有一个包含XML数据的简单表

create table emp
(dept xmltype)

其中的数据

insert into emp values ('<dept bldg="101">
<employee id="901">
    <name>
        <first>John</first>
        <last>Doe</last>
    </name>
    <office>344</office>
    <salary currency="USD">55000</salary>
</employee>
</dept>')


insert into emp values ('<dept bldg="103">
<employee id="902">
    <name>
        <first>Peter</first>
        <last>Pan</last>
    </name>
    <office>216</office>
    <phone>905-416-5004</phone>
    </employee>
</dept>')



insert into emp values ('<dept bldg="114">
<employee id="903">
    <name>
        <first>Mary</first>
        <last>Jones</last>
    </name>
    <office>415</office>
    <phone>905-403-6112</phone>
    <phone>647-504-4546</phone>
    <salary currency="USD">64000</salary>
</employee>
</dept>')

当我在下面执行时,会抛出ORA-19100:PASSING或RETURNING关键字预期

select XMLCAST(XMLQUERY('$INPT_XML/dept/employee/office/text()' PASSING dept  
AS "INPT_XML") AS VARCHAR(20))
FROM emp;

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

不确定你在做什么,但是你的错误告诉你错误,你需要RETURNING CONTENT条款。

SELECT
XMLCAST(XMLQUERY('$INPT_XML/dept/employee/office/text()' PASSING dept AS "INPT_XML" RETURNING CONTENT) AS VARCHAR2(20) )

这     EMP;

给我这个输出:

XMLCAST(XMLQUERY('$I
--------------------
344
216
415

关于Oracle XML here

的好消息,操作方法

答案 1 :(得分:0)

问题在于错过了RETURNING CONTENT条款。

似乎Oracle强制使用它。

https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions236.htm#SQLRF06209

RETURNING CONTENT表示XQuery评估的结果是XML 1.0文档或符合XML 1.0语义的文档片段。