Sql 更新XML Clob节点
我有一个表事务,其中我有一个clob xclob 我想将“property”节点的“record_start_dll_date”值更新为record_start_date(即我想删除_dll部分) 和“记录结束日期”来记录结束日期。 我正在使用oracle数据库。如何修改这些节点值Sql 更新XML Clob节点,sql,xml,database,oracle,qxmlquery,Sql,Xml,Database,Oracle,Qxmlquery,我有一个表事务,其中我有一个clob xclob 我想将“property”节点的“record_start_dll_date”值更新为record_start_date(即我想删除_dll部分) 和“记录结束日期”来记录结束日期。 我正在使用oracle数据库。如何修改这些节点值 <?xml version ="1.0"?> <properties> <property name ="record_start_dll_date&
<?xml version ="1.0"?>
<properties>
<property name ="record_start_dll_date">
<value>1/1/2021</value>
</property>
<property name ="record_dll_end_date">
<value>21/12/2021</value>
</property>
</properties>
1/1/2021
21/12/2021
您可以使用XMLQuery更新,或者使用特定属性值:
xmlquery ('copy $i := $p1 modify (
(for $j in $i/properties/property[@name="record_start_dll_date"]/@name
return replace value of node $j with $p2),
(for $j in $i/properties/property[@name="record_dll_end_date"]/@name
return replace value of node $j with $p3)
) return $i'
passing xmltype(xclob) as "p1",
'record_start_date' as "p2",
'record_end_date' as "p3"
returning content)
或剥离任何\u dll
:
xmlquery ('copy $i := $p1 modify (
for $j in $i/properties/property[contains(@name, "_dll")]/@name
return replace value of node $j with replace($j, "_dll", "")
) return $i'
passing xmltype(xclob) as "p1"
returning content)
无论哪种方式,都可以将其合并到update语句中,并使用匹配的XMLExists子句来避免不必要的更新:
update transaction
set xclob = xmlquery ('copy $i := $p1 modify (
for $j in $i/properties/property[contains(@name, "_dll")]/@name
return replace value of node $j with replace($j, "_dll", "")
) return $i'
passing xmltype(xclob) as "p1"
returning content).getclobval()
where xmlexists('$p1/properties/property[contains(@name, "_dll")]'
passing xmltype(xclob) as "p1")
你想要什么还不是很清楚。您是否正在更改属性名称,以有效地删除
\u dll
部分?或者将这些节点的值更改为不同的日期-在这种情况下,这些新日期来自何处?如果有多个CLOB,它们是否都需要对属性或值进行相同的更改?您是在更新表中的CLOB值,还是在查询时更新它?@AlexPoole是的,我想从属性名称中删除_dll部分。@AlexPoole非常感谢,在您的帮助下,我终于更新了我的记录。