如果仅存在<节点1 =“”>,则删除行;如果存在<节点2 =“”> <节点3 =“”>,则仅删除<节点1 =“”>

时间:2018-08-04 12:58:42

标签: sql xml plsql

请考虑表格下面的两行。

max.poll.records

我的问题是:

如果XML仅具有节点poll()(意味着ID_NUM | GENERAL_DATA 0100 | <...><UpdateServices><AddServices><RemoveServices><...> 0200 | <...><UpdateServices><...> <UpdateServices>不存在)如何删除行?和

如果存在<AddServices><RemoveServices>,如何从XML中删除节点<UpdateServices>

<AddServices>

谢谢。 :)

1 个答案:

答案 0 :(得分:0)

如果XML仅具有节点<UpdateServices>(意味着<AddServices><RemoveServices>不存在)如何删除行

delete from sample_table X
where xmlExists('//UpdateServices' passing X.general_data)
    and not xmlExists('//AddServices|//RemoveServices' passing X.general_data)
;

如果存在<UpdateServices><AddServices>,如何从XML中删除节点<RemoveServices>

update sample_table X
set X.general_data = deleteXml(X.general_data, '//UpdateServices')
where xmlExists('//AddServices' passing X.general_data)
    and xmlExists('//RemoveServices' passing X.general_data)
;

注意:我相信后者可以通过XQuery更加有效地完成,但是由于我(仍然)不了解该语言,因此我只能提供deleteXml()解决方案。 / p>