在XMLTYPE列中插入子节点

Rac*_*cha 9 sql oracle xquery xmltype oracle12c

我有一个简单的查询:

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;
Run Code Online (Sandbox Code Playgroud)

我想要做的是在节点内插入一个节点<c>,但Oracle 12c抛出了这个错误:<b><a>

ORA-19114: XPST0003 - error during parsing the XQuery expression: 
           LPX-00801: XQuery syntax error at 'EOF'
           5   -
           -  ^
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

NEWXCOL
-------------
<a>
    <b>1</b>
    <c>2</c/>
</a>
Run Code Online (Sandbox Code Playgroud)

我已经尝试在Oracle Docs中寻找替换appendChildXML并遵循该示例但只得到了错误.

我知道这是非常基本的,我错过了一些明显的东西.请帮忙.

Egg*_*ggi 5

以下代码应该适用于 11 和 12(已弃用):

SELECT insertXMLafter(XMLType('<a><b>1</b><c>3</c></a>'),
                 '/a/b', XmlType('<c>2</c>'))
  FROM dual;
Run Code Online (Sandbox Code Playgroud)

使用新的 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;
Run Code Online (Sandbox Code Playgroud)

有关 XMLQuery 以及旧的已弃用函数的更多详细信息,请访问:http : //docs.oracle.com/database/121/ADXDB/app_depr_upd.htm#ADXDB6160