我在xmlTable
中使用XQuery从XML中提取一些元素并将结果放在一行中。这是简化的工作示例:
WITH xml AS (
SELECT xmlType('
<elements>
<element attr="1">text 1</element>
<element attr="2">text 2</element>
<!-- a dozen other elements -->
<element attr="N">text N</element>
</elements>'
) doc
FROM dual)
SELECT line
FROM xml CROSS JOIN xmlTable ('
let $ret :=
<line>
{$doc/elements/element[@attr="1"]},{$doc/elements/element[@attr="2"]},{$doc/elements/element[@attr="N"]}
</line>
return $ret' PASSING xml.doc AS "doc"
COLUMNS line varchar2(4000) PATH '/line'
);
LINE
----------------------------------------
text 1,text 2,text N
但是包装标签line
中的表达式确实很长(超过二十几个元素)。
有多种方法可以在多条较小的线条中打破这条长线?所以它看起来像这样:
<line>
{$doc/elements/element[@attr="1"]},
{$doc/elements/element[@attr="2"]},
{$doc/elements/element[@attr="N"]}
</line>