0

技术人员——当我尝试部署我知道在 Linux v9.7 上工作的存储过程时,我在 i db2 6.1 安装中找不到 *LIBL 类型 *SQLUDT 中的 sql0204 XML。我试图让它工作的原因是因为我真的需要传递一个表(或数组)变量。我找不到将多维数组发送到 i 的 6.1 v 上的 sproc 的方法,所以我想我会尝试使用 xml 文档来解决这个问题。但这也失败了......有人对我如何解决这个问题有任何建议吗?

这是适用于 v9.7、Linux 的存储过程:

  CREATE PROCEDURE HCMDEV.EMP_MULTIPLE_XML (IN DOC XML)
  DYNAMIC RESULT SETS 1
  READS SQL DATA
  LANGUAGE SQL SPECIFIC EMP_MULTIPLE_XML

  P1: BEGIN

  DECLARE CSR1 CURSOR WITH RETURN FOR
    SELECT emp.EMPID,
           emp.FIRSTNAME,
           emp.LASTNAME,
           emp.DIVISION,
           emp.DISTRICT,
           emp.LOCATION,
           emp.OPERATIONALAREA,
           emp.TERMDATE,
           emp.REHIREDATE,
           emp.HIREDATE,
           emp.ADDRESSLINE1,
           emp.ADDRESSLINE2,
           emp.CITY,
           emp.STATE,
           emp.ZIPCODE,
           emp.TELEPHONE1,
           emp.POSITIONCODE,
           emp.POSITIONTITLE,
           emp.HIRECODE
        FROM HCMDEV.EMPLOYEE emp
         WHERE EMP.EMPID IN
          (SELECT X.EMPID
           FROM XMLTABLE('$d/EMPLOYEE/EMPID' PASSING DOC AS "d" COLUMNS EMPID CHAR(9) PATH '.') AS X);

  OPEN CSR1;
  END P1
4

1 回答 1

0

对于那些关注这个线程的人,xmltable 直到 V7R1 才可用。解决方法是创建一个存储过程,它接受 CLOB 数据类型作为 IN 参数。在我的例子中,我传递了一个带有逗号的长字符串来分隔 empid 的值。这工作得很好。这是一个示例:

 CREATE PROCEDURE HCMDEV.EMP_MULT (IN emp_array CLOB(2M))
 DYNAMIC RESULT SETS 1
 READS SQL DATA
 LANGUAGE SQL SPECIFIC EMP_MULT
 P1: BEGIN
-- #######################################################################
-- # Returns specific employees based on incoming clob array
-- #######################################################################


DECLARE v_dyn varchar(10000);
DECLARE v_sql varchar(10000);

DECLARE cursor1 CURSOR WITH RETURN FOR v_dyn;

SET v_sql = 
  'SELECT
     emp.EMPID,
     emp.FIRSTNAME,
     emp.LASTNAME
     FROM HCMDEV.EMPLOYEE emp
      WHERE emp.EMPID IN (' || emp_array || ')';

   PREPARE v_dyn FROM v_sql;

   OPEN cursor1;

结束 P1

于 2012-09-13T23:27:11.603 回答