[英]XQuery syntax error
在Oracle 11gR2上,我需要检索XML文件的一部分并创建一个新文件:
SELECT XMLQUERY
('for $e in /edi_l/trader
where $e//pod="XX999"
order by $e
return <pod>{$e}</pod>'
passing MY_T.XML_FILE
returning content
)
FROM MYTABLE MY_T;
输出:
<pod><trader cdisp="AB1111">
<idimpp num="1234">
<hdr>
<odn>567</odn>
<pod>XX999</pod>
</hdr>
...
</idimpp>
</trader>
</pod>
如果我省略标签
<pod></pod>
SELECT XMLQUERY
('for $e in /edi_l/trader
where $e//pod="XX999"
order by $e
return {$e}
passing MY_T.XML_FILE
returning content
)
FROM MYTABLE MY_T;
我收到错误消息:
ORA-19114: XPST0003
LPX-00801: XQuery syntax error at '{'
4 return {$e}
- ^
19114. 00000 - "XPST0003 - error during parsing the XQuery expression: %s"
*Cause: An error occurred during the parsing of the XQuery expression.
*Action: Check the detailed error message for the possible causes.
Error at Line: 30 Column: 6
为什么?
我需要检索数据而不创建新的外部标签。
如果不将花括号嵌入到自己的节点中,则不需要花括号:
with mytable (xml_file) as (
select xmltype('<pod><trader cdisp="AB1111">
<idimpp num="1234">
<hdr>
<odn>567</odn>
<pod>XX999</pod>
</hdr>
</idimpp>
</trader>
</pod>')
from dual
)
SELECT XMLQUERY
('for $e in //trader
where $e//pod="XX999"
order by $e
return $e'
passing MY_T.XML_FILE
returning content
)
FROM MYTABLE MY_T;
XMLQUERY('FOR$EIN//TRADERWHERE$E//POD="XX999"ORDERBY$ERETURN$E'PASSINGMY_T.XML_FILERETURNINGCONTENT)
--------------------------------------------------------------------------------
<trader cdisp="AB1111"><idimpp num="1234"><hdr><odn>567</odn><pod>XX999</pod></hdr></idimpp></trader>
从有关XQuery表达式的文档中:
计算(动态)构造 –您可以在运行时使用计算值构造XML数据。 例如,以下XQuery表达式构造此XML数据:
<foo toto="5"><bar>tata titi</bar> why? </foo>
<foo toto="5"><bar>tata titi</bar> why? </foo>
。<foo>attribute toto {2+3}, element bar {"tata", "titi"}, text {" why? "}</foo>
在这个例子中,元素
foo
是直接构造; 计算其他构造。 实际上,计算构造函数的参数不是文字(例如toto
和"tata"
),而是要求值的表达式(例如2+3
)。 元素或属性构造函数的名称和值参数都可以计算。 大括号({
,}
)用于标记要评估的XQuery表达式。
在您的第一个查询pod
是直接构造并计算${e}
,因此必须使用花括号。 在第二个版本中,您直接在任何构造之外引用$e
,因此没有评估,因此不需要(或允许)花括号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.