我有一个简单的查询:
WITH xtbl AS ( SELECT XMLTYPE ('<a><b>1</b></a>') AS xcol FROM DUAL ) SELECT XMLQUERY ('copy $tmp := . modify insert node <c>2</c> into $tmp/a/b return $tmp' PASSING xcol RETURNING CONTENT) AS newxcol FROM xtbl;
我要执行的操作是在节点内部<c>之后插入一个节点,但是Oracle 12c抛出此错误:<b>``<a>
<c>
<b>``<a>
ORA-19114: XPST0003 - error during parsing the XQuery expression: LPX-00801: XQuery syntax error at 'EOF' 5 - - ^
我希望输出为:
NEWXCOL ------------- <a> <b>1</b> <c>2</c/> </a>
我尝试在Oracle Docs中寻找替代品,appendChildXML并按照该示例进行操作,但仅收到错误。
appendChildXML
我知道这是非常基本的,我缺少明显的东西。请帮忙。
以下代码应适用于11和12(不建议使用):
SELECT insertXMLafter(XMLType('<a><b>1</b><c>3</c></a>'), '/a/b', XmlType('<c>2</c>')) FROM dual;
使用新的XMLQuery语法的相同代码:
SELECT XMLQuery('copy $tmp := . modify insert node <c>2</c> after $tmp/a/b return $tmp' PASSING XmlType('<a><b>1</b><c>3</c></a>') RETURNING CONTENT) FROM dual;
有关XMLQuery以及旧版本的不推荐使用的功能的更多详细信息,可以在这里找到:http : //docs.oracle.com/database/121/ADXDB/app_depr_upd.htm#ADXDB6160