在db2中从xml中提取节点
我正在努力从具有多个节点的xml中提取节点 这是xml在db2中从xml中提取节点,db2,extract,Db2,Extract,我正在努力从具有多个节点的xml中提取节点 这是xml <DataArea> <TB001I> <IOCOD>aaa</IOCOD> <IODESC>desc</IODESC> </TB001I> <TB001I> <IOCOD>bbb</IOCOD> <IODESC>desc</IODESC> </TB001I> <TB001I>
<DataArea>
<TB001I>
<IOCOD>aaa</IOCOD>
<IODESC>desc</IODESC>
</TB001I>
<TB001I>
<IOCOD>bbb</IOCOD>
<IODESC>desc</IODESC>
</TB001I>
<TB001I>
<IOCOD>ccc</IOCOD>
<IODESC>desc</IODESC>
</TB001I>
</DataArea>
运行SP时,P2和P4正常,但P3不返回任何内容
我将在xml中为TB001I类型的任何标记或循环创建一个节点,并返回IOCOD和IODESC的任何值
你能帮忙吗?
谢谢xmlquery是错误的,但正确的$d/DataArea/TB001I[i]/IOCOD也不起作用您发布的代码有很多错误。XML中的元素名称是
IOCOD
和IODESC
,但XQuery引用的是cdcode
和ccdesc
。变量p5
未在存储过程中的任何位置声明。既然您说您能够运行该过程并获得部分正确的结果,请编辑您的问题,使其包含的代码有效。除其他问题外,您的过程目前编写为迭代,直到i
等于5,每次都用//TB001[i]/ccdesc
中的任何内容覆盖p3
,即使文档中该位置不存在任何内容。将五次迭代硬编码到循环中(不管inpdoc
输入文档的大小)意味着在循环结束时,只要输入文档包含少于五个//TB001
元素,p3
将始终为空。
CREATE OR REPLACE PROCEDURE TESTSQL
(
IN inpdoc XML,
OUT p2 VARCHAR(30),
OUT p3 VARCHAR(30)
)
LANGUAGE SQL
NO EXTERNAL ACTION
BEGIN
declare i int;
declare z int;
declare p4 varchar(30);
set i = 0;
set z = 1;
while (z = 1) do
set i = i + 1;
SET p2 =
XMLCAST
(
XMLQUERY('$d/DataArea/TB001[1]/cdcod' PASSING inpdoc AS "d")
AS VARCHAR(30)
);
SET p3 =XMLCAST
( XMLQUERY('$d/DataArea/TB001[i]/ccdesc' PASSING inpdoc AS "d")
AS VARCHAR(30)
);
SET p4 =
XMLCAST
(
XMLQUERY('$d/DataArea/TB001[last()]/cdcod' PASSING inpdoc AS "d")
AS VARCHAR(30)
);
SET p5 =
XMLQUERY('for $b in$d/DataArea/TB001 return $b/cdcod' PASSING inpdoc AS "d");
if i = 5 then
set z = 0;
end if;
end while;
END