技术人员--尽管我知道我有两行,一行匹配EMPNO为000020,另一行匹配为000030,但我得到的结果集为空。有什么想法吗?
电话是这样的:
CALL DB2INST1.EMP_MULTIPLE_XML(XMLPARSE(
DOCUMENT '<EMPLOYEE><EMPNO>000020</EMPNO><EMPNO>000030</EMPNO></EMPLOYEE>'));下面是另一个存储过程:
BEGIN
CREATE PROCEDURE DB2INST1.EMP_MULTIPLE_XML (IN DOC XML)
DYNAMIC RESULT SETS 1
READS SQL DATA
LANGUAGE SQL SPECIFIC EMP_MULTIPLE_XML
DECLARE CSR1 CURSOR WITH RETURN FOR
SELECT emp.EMPNO,
emp.FIRSTNME,
emp.LASTNAME,
emp.WORKDEPT
FROM DB2INST1.EMPLOYEE emp
WHERE emp.EMPNO IN
(SELECT X.EMPNO FROM
XMLTABLE('$d/EMPLOYEE/EMPNO' PASSING DOC AS "d" COLUMNS EMPNO CHAR(6) PATH 'EMPNO') AS X);
OPEN CSR1;
END发布于 2012-09-12 20:27:07
对于那些在我后面关注这个线程的人,下面是一个有效的sproc:
CREATE OR REPLACE PROCEDURE test.INPUT_MULTIPLE_XML (IN DOC XML)
DYNAMIC RESULT SETS 1
LANGUAGE SQL SPECIFIC INPUT_MULTIPLE_XML
BEGIN
DECLARE CSR1 CURSOR WITH RETURN FOR
select t.type,
t.tabschema,
t.tabname
from syscat.tables t,
XMLTABLE('$d/tables/tabname' PASSING DOC AS "d"
COLUMNS "TABNAME" VARCHAR(128) PATH '.' ) AS X
WHERE X.tabname = t.tabname ;
OPEN CSR1;
END 发布于 2012-09-09 13:03:44
考虑到进程正在传递过程设置的结果,FETCH似乎不是必需的。尝试删除FETCH和它之后的所有内容(除了最后一个结束符)。
XMLTABLE调用中的'$d/employee'参数不正确,因为您希望每次出现'$d/employee/empno'时都有一行表格输出,而不是'$d/employee'。这就是导致item()、item()+ )错误的原因
这个过程是一个独立的示例,它展示了如何实现通过XML文档参数传递一组输入值的目标:
CREATE OR REPLACE PROCEDURE test.INPUT_MULTIPLE_XML (IN DOC XML)
DYNAMIC RESULT SETS 1
LANGUAGE SQL
SPECIFIC INPUT_MULTIPLE_XML
BEGIN
DECLARE CSR1 CURSOR WITH RETURN FOR
select t.type,
t.tabschema,
t.tabname
from syscat.tables t,
XMLTABLE('$d/tables/tabname' PASSING DOC AS "d"
COLUMNS "TABNAME" VARCHAR(128) PATH '.'
) AS X
WHERE X.tabname = t.tabname
;
OPEN CSR1;
ENDhttps://stackoverflow.com/questions/12326594
复制相似问题