ストアド プロシージャは、渡された各パラメーターを宣言する必要があります。さらに、宣言部分で宣言されている 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;
次に示すように、ストアド プロシージャ 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;