在更新表中的oracle xml数据时,出现以下错误。
SQL 错误: ORA-18126: XUDY0027 - 无效的目标表达式18126. 00000 - "XUDY0027 - 目标表达式无效"*原因:插入、替换或重命名表达式的目标表达式 计算结果为空序列。*操作:无。
update test
set XMLDATA=
xmlquery(
'copy $d := .
modify (
for $i in $d/workbook/worksheet
return replace value of node $i/@sheetName with concat($i/@sheetName, $i/@sheetId)
)
return $d'
passing test.XMLDATA
returning content
)
.XML:-
'<workbook>
<worksheet sheetName="MySheet" sheetId="1"/>
</workbook>'
如果以属性而不是其父节点为目标,则可以直接更新该值;只需查看父节点以获取要连接的 name/ID 值:
update test
set XMLDATA=
xmlquery(
'copy $d := .
modify (
for $i in $d/workbook/worksheet/@sheetName
return replace value of node $i with concat($i/../@sheetName, $i/../@sheetId)
)
return $d'
passing test.XMLDATA
returning content
)
数据库<>小提琴
请注意,这在 11.2.0.4 上为我抛出了一个 ORA-600;在 db<>fiddle (11.2.0.2( 上,它得到了一个稍微不那么讨厌的"ORA-19112:评估期间引发的错误:XQuery 更新无法编译"。我现在没有可以测试的 12c 数据库,所以在 12cR1 或 12cR2 或两者上都会出错是可行的 - 你还没有说你正在使用哪些,或者你的补丁级别。但是由于它在 18c 之前的某个时间是固定的,您可能没事。