Oracle 删除 XMLTYPE 中的多个节点

标签 oracle plsql xmltype

我有一个 XMLTYPE 内容,并且我想删除该 XML 中的多个标记。

我使用 XMLQUERY 删除 Header 内的标签 recordType,如下所示:

   SELECT XMLQUERY (
             'copy $i := $p modify
                  delete nodes $i//Header/recordType
                return $i'
             PASSING pv_header AS "p" RETURNING CONTENT)
     INTO result
     FROM DUAL;

如果我想删除多个标记而不使用 XMLQUERY 创建新的 SELECT 语句,该怎么办?我不能这样做:

SELECT XMLQUERY (
                 'copy $i := $p modify
                      delete nodes $i//Header/recordType
                      delete nodes $i//Header/interfaceType
                    return $i'
                 PASSING pv_header AS "p" RETURNING CONTENT)
         INTO result
         FROM DUAL;

注意:我可以使用deleteXML,但它在 Oracle 12c 中被声明为已弃用的函数。

提前致谢! 菲利普

编辑:我用这个作为引用:https://docs.oracle.com/database/121/ADXDB/xdb04cre.htm#ADXDB6086

最佳答案

您可以对删除节点进行一系列调用,将其括在括号中进行分组,并用逗号分隔进行序列连接:

WITH t (pv_header) AS (
  SELECT xmltype('<Header><recordType/><interfaceType/><other/></Header>')
  FROM dual
)
SELECT XMLQUERY (
  'copy $i := $p modify
    (delete nodes $i//Header/recordType,
      delete nodes $i//Header/interfaceType)
    return $i'
  PASSING pv_header AS "p" RETURNING CONTENT)
FROM t;

XMLQUERY('COPY$I:=$PMODIFY(DELETENODES$I//HEADER/RECORDTYPE,DELETENODES$I//HEADE
--------------------------------------------------------------------------------
<Header><other/></Header>

关于Oracle 删除 XMLTYPE 中的多个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631601/

相关文章:

linux - 使用 oracle 以外的其他 linux 用户连接到 sqlplus

sql - Oracle:连接字段的整数值

oracle - 如何使用 iBatis 从数据库中选择 BLOB 列

oracle - 从 XMLTYPE 解析多列

oracle - SQL Developer 中列的检查约束

database - PL/SQL 脚本验证

oracle - plsql oracle检查约束错误

java - 如何在 PL/SQL 中返回 ROWTYPE 并在 Java 中检索它?

sql - 在 XMLTYPE 列中插入子节点

sql - 将 XML 存储到 Postgres