我想知道是否有人可以帮忙吗?
我正在尝试将一个xml文档中的所有元素(根级别)插入到另一个xml文档中。两个文档都作为XMLType列驻留在Oracle 12c表中。我希望能够从他们的表中读取它们,执行转换,然后将其作为新文档写入表中。大部分内容都是直截了当的,但是我在插入XQuery操作时遇到了问题...我天真地想象这会很简单,但似乎无法正确。在Oracle 12c之前,我能够使用appendchildxml函数:
select
appendchildxml(my_output, '/Message', my_other_file, 'xmlns="SFA/ILR/2016-17"') into my_output
from
dual;
但是在Oracle 12c中不推荐使用该函数,所以我现在需要使用XQuery。
update xml_testing_12c
set
my_ilrxml =
XMLQuery('
xquery version "1.0";
copy $ilr := .
modify
insert nodes $dp_out/Destinations/node() as last into $ilr/Message
return $ilr
'
passing my_ilr, my_dpoutcome as "dp_out" returning content
)
where
run_number = (select max(run_number) from xml_testing_12c);
my_ilr和my_dpoutcome是包含我的有效XML文档的PL / SQL XMLType变量。它们具有以下结构:
my_ilr如下:
<Message xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="SFA/ILR/2016-17"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="SFA/ILR/2016-17">
<Header>
<CollectionDetails>
</CollectionDetails>
<Source>
</Source>
</Header>
<LearningProvider>
</LearningProvider>
<Learner>
<LearningDelivery>
</LearningDelivery>
</Learner>
</Message>
my_dpoutcome如下:
<Destinations>
<LearnerDestinationandProgression>
<LearnRefNumber></LearnRefNumber>
<ULN></ULN>
<DPOutcome>
<OutType></OutType>
<OutCode></OutCode>
<OutStartDate></OutStartDate>
<OutCollDate></OutCollDate>
</DPOutcome>
</LearnerDestinationandProgression>
</Destinations>
父节点中有大量的LearnerDestinationandProgression元素。
我收到以下错误:
ORA-19112:评估期间出错: XVM-01155:[XUDY0027]目标表达式无效 ORA-06512:第286行
非常感谢任何帮助。
感谢。
答案 0 :(得分:0)
XUDY0027 - 意思是。你试图插入一些东西。
您的xmls具有不同的命名空间。
1)消息有xmlns =“SFA / ILR / 2016-17”
2)目的地有xmlns =“oracle的一些默认URL”
当您在xmlquery中处理两个xmls时,此表达式$ilr/Message
将返回null。因为在默认命名空间中没有元素Message。
快速修复:*
- 任何命名空间;
insert nodes $dp_out/Destinations as last into $ilr/*:Message
更优雅的方式是命名空间声明。
xquery version "1.0";
declare namespace ns="SFA/ILR/2016-17";
copy $ilr := .
modify
insert nodes $dp_out/Destinations as last into $ilr/ns:Message
return $ilr
'