渡されたパラメーターのデータ タイプの宣言

注:このトピックは、Windows 環境 (ローカル開発) にのみ適用されます。

ストアド プロシージャは、渡された各パラメーターを宣言する必要があります。さらに、宣言部分で宣言されている DATA TYPE は、使用されているデータ ソースに対して有効であり、ストアド プロシージャを呼び出す際には互換性のあるホスト変数のデータ タイプを使用する必要があります。詳細については、『SQL データ型』を参照してください。

例:

CREATE PROCEDURE GETPRML
 (IN  PROCNM CHAR(18)
  ,IN SCHEMA CHAR (8)
  ,INOUT OUTCODE INTEGER
  ,INOUT PARMLIST CHAR (26)
  )
   LANGUAGE COBOL
   DETERMINISTIC
   READS SQL DATA
   NO DBINFO
   FENCED
   NOT THREADSAFE
   EXTERNAL NAME "getprml!getprml"
   PARAMETER STYLE GENERAL
   PROGRAM TYPE SUB
   RESULT SETS 0;
注:DB2 LUW はオプションとして PL/I を直接サポートしていないため、LANGUAGE COBOL を指定してください。また、EXTERNAL 名定義は、PL/I ルーチンの大文字小文字の区別と一致している必要があります。

次に示すように、ストアド プロシージャ getprml を定義して、CREATE PROCEDURE 文での定義と一致するようにします。

GETPRML:
  PROC(PROCNM, SCHEMA, OUTCODE, PARMLST)
  external('getprml');

  DECLARE PROCNM CHAR(18),               /* INPUT parm -- PROCEDURE name */
          SCHEMA CHAR(8),                /* INPUT parm -- User's SCHEMA  */
          OUTCODE FIXED BIN(31) native, /* INOUT -- SQLCODE from        */
          PARMLST CHAR(26);              /* INOUT -- CURRENT TIMESTAMP   */

  EXEC SQL INCLUDE SQLCA;

  DECLARE TIMESTAMP CHAR(26);

  /************************************************************/
  /* Execute SELECT from SYSIBM.SYSDUMMY1 if TEST passed      */
  /************************************************************/

  if PROCNM = ‘TEST’ then
    do;
      exec sql
        SELECT CURRENT TIMESTAMP INTO :TIMESTAMP
          FROM SYSIBM.SYSDUMMY1;
    end;
  else
    do;
      TIMESTAMP = ‘PASS’;
      SQLCODE = -12;
    end;

  PARMLST = TIMESTAMP;
  OUT_CODE = SQLCODE;         /* return SQLCODE to caller */
  RETURN;
END GETPRML;