XMLTYPE 更新替换 Oracle 12c 中最后一个标记中的值
XMLTYPE update replacing values in last tag in Oracle 12c
我有一个包含 3 个同名标记元素的 XMLTYPE。我想替换';'带有“.”在最后一个。像这样:
SELECT XMLQUERY (
'copy $tmp := . modify
(for $i in $tmp/root/test/text()
return replace value of node $i
with ''.'')
return $tmp'
PASSING XMLTYPE (
'<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari;</test></root>')
RETURNING CONTENT)
FROM DUAL
我的结果应该是这样的;
<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari.</test></root>
谢谢
目前您正在修改所有 test
节点,并且您正在用句点完全替换内容。从您的预期输出来看,这不是您想要的。
您可以将 test
个节点数计入一个变量,然后使用 [postition()=$n]
仅将您的替换应用到最后一个节点。然后可以使用replace()
或translate()
函数只将;
更改为.
,而不是替换节点的整个文本内容:
SELECT XMLQUERY (
'copy $tmp := . modify
(let $n := count($tmp/root/test)
for $i in $tmp/root/test[position()=$n]/text()
return replace value of node $i with replace($i, ";", "."))
return $tmp'
PASSING XMLTYPE (
'<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari;</test></root>')
RETURNING CONTENT) AS RESULT
FROM DUAL;
RESULT
------------------------------------------------------------------------------------------------------------------------
<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari.</test></root>
我有一个包含 3 个同名标记元素的 XMLTYPE。我想替换';'带有“.”在最后一个。像这样:
SELECT XMLQUERY (
'copy $tmp := . modify
(for $i in $tmp/root/test/text()
return replace value of node $i
with ''.'')
return $tmp'
PASSING XMLTYPE (
'<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari;</test></root>')
RETURNING CONTENT)
FROM DUAL
我的结果应该是这样的;
<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari.</test></root>
谢谢
目前您正在修改所有 test
节点,并且您正在用句点完全替换内容。从您的预期输出来看,这不是您想要的。
您可以将 test
个节点数计入一个变量,然后使用 [postition()=$n]
仅将您的替换应用到最后一个节点。然后可以使用replace()
或translate()
函数只将;
更改为.
,而不是替换节点的整个文本内容:
SELECT XMLQUERY (
'copy $tmp := . modify
(let $n := count($tmp/root/test)
for $i in $tmp/root/test[position()=$n]/text()
return replace value of node $i with replace($i, ";", "."))
return $tmp'
PASSING XMLTYPE (
'<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari;</test></root>')
RETURNING CONTENT) AS RESULT
FROM DUAL;
RESULT
------------------------------------------------------------------------------------------------------------------------
<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari.</test></root>