0

更新表中的 oracle xml 数据时出现以下错误。

SQL 错误:ORA-18126:XUDY0027 - 无效的目标表达式 18126。00000 - “XUDY0027 - 无效的目标表达式” *原因:INSERT、REPLACE 或 RENAME 表达式的目标表达式计算为空序列。*行动:无。

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>'
4

1 回答 1

0

如果您以属性而不是其父节点为目标,则可以直接更新该值;您只需要查看要连接的名称/ 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
         )

db<>小提琴

请注意,这会在 11.2.0.4 上为我抛出 ORA-600;在 db<>fiddle (11.2.0.2) 上,它得到的“ORA-19112:评估期间引发的错误:XQuery Update 无法编译”。我没有 12c 数据库,我现在可以对此进行测试,所以它可能会在 12cR1 或 12cR2 或两者上出错 - 你还没有说你正在使用哪个,或者你的补丁级别。但是由于它在 18c 之前的某个时间已修复,因此您可能会没事。

于 2019-07-17T12:21:42.270 回答