首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2: xmlparse/cursor无结果集

DB2: xmlparse/cursor无结果集
EN

Stack Overflow用户
提问于 2012-09-08 07:20:28
回答 2查看 991关注 0票数 1

技术人员--尽管我知道我有两行,一行匹配EMPNO为000020,另一行匹配为000030,但我得到的结果集为空。有什么想法吗?

电话是这样的:

代码语言:javascript
复制
CALL DB2INST1.EMP_MULTIPLE_XML(XMLPARSE(
    DOCUMENT '<EMPLOYEE><EMPNO>000020</EMPNO><EMPNO>000030</EMPNO></EMPLOYEE>'));

下面是另一个存储过程:

代码语言:javascript
复制
   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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-12 20:27:07

对于那些在我后面关注这个线程的人,下面是一个有效的sproc:

代码语言:javascript
复制
  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 
票数 0
EN

Stack Overflow用户

发布于 2012-09-09 13:03:44

考虑到进程正在传递过程设置的结果,FETCH似乎不是必需的。尝试删除FETCH和它之后的所有内容(除了最后一个结束符)。

XMLTABLE调用中的'$d/employee'参数不正确,因为您希望每次出现'$d/employee/empno'时都有一行表格输出,而不是'$d/employee'。这就是导致item()、item()+ )错误的原因

这个过程是一个独立的示例,它展示了如何实现通过XML文档参数传递一组输入值的目标:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12326594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档