0

技術者-Linuxv9.7で動作することがわかっているストアドプロシージャをデプロイしようとすると、*LIBLタイプ*SQLUDTのsql0204XMLがidb26.1インストールで見つかりません。これを機能させようとしている理由は、テーブル(または配列)変数を渡す必要があるためです。6.1 vのiのsprocにマルチディメンション配列を送信する方法が見つからなかったので、xmlドキュメントでそれを回避してみようと思いました。しかし、それも失敗しました...この問題を解決する方法について誰かが私にアドバイスを持っていますか?

v9.7、Linuxで動作するsprocは次のとおりです。

  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まで使用できません。回避策は、INパラメータとしてCLOBデータ型を受け入れるストアドプロシージャを作成することです。私の場合、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 に答える