我们陷入了从Oracle 10迁移到Oracle 12c的过程中。 我们迁移了部分数据库,其中大部分数据都包含XmlType文档。由于新要求,某些文档需要更新属性。
最初,我们有以下xml:
index: 0 1 2 3 4 5
result: 0 1 2 0 1 2
item: 1 2 3 1 2 3
在xmlupdate之后,它需要是这样的:
<root>
<a id="1">
aaaaaaaaaa
</a>
<b id="2">
bbbbbbbbbb
</b>
</root>
在Oracle 10中,这将成功:
<root>
<a id="1">
aaaaaaaaaa
</a>
<b id="2" newAttribute="">
bbbbbbbbbb
</b>
</root>
这应该是可行的,但是在Oracle 12中它不起作用(select语句在update TABLE_NAME set whattoUpdate = (select insertchildxml(whattoUpdate, 'xpathexpression', '@attribute', 'valueOfAttribute', 'namespace') as result from TABLE_NAME where id = XX);
中返回空白xml)。
根据this,不再支持函数SqlDeveloper
。
答案 0 :(得分:1)
create table example( xml clob);
insert into example values( '<root>
<a id="1">
aaaaaaaaaa
</a>
<b id="2">
bbbbbbbbbb
</b>
</root>');
update example set xml = xmlserialize( document XMLQuery('
xquery version "1.0";
copy $cp := .
modify
insert node attribute newAttribute {""} into $cp/root/a
return $cp
'
passing xmltype(xml) returning content) indent size = 2);
xmlserialize(document {xmltype} indent size =2 )
- 正在将xml更改为clob
xmluqery
结构是
xmlquery( 'xquery language' passing {xmltype} returning content)
copy $cp :=.
创建输入xml文档的副本。是必需的,因为无法修改原始数据。
modify
insert node attribute newAttribute {""} into $cp/root/a
return $cp
- xquery命令。在所选元素中添加新属性。