Oracle 删除 XMLTYPE 中的多个节点
Oracle Delete more than one node in 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
您可以对 delete nodes
进行一系列调用,用括号括起来进行分组,并用逗号分隔进行序列连接:
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>
我有一个 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
您可以对 delete nodes
进行一系列调用,用括号括起来进行分组,并用逗号分隔进行序列连接:
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>