如何通过 Xquery 更新表中的 oracle XML 数据类型



在更新表中的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 之前的某个时间是固定的,您可能没事。

相关内容

  • 没有找到相关文章

最新更新