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