Page History
...
このストアド・プロシージャにはSQLステートメントが含まれます。この CALL コマンドは、*QUERY、*UPDATE、または*EXECUTE のいずれかのタイプを指定する CALLTYPE コマンドと共に使用されます。
構文:
コマンド | キーワード | 値 | 開発者用メモ |
|---|---|---|---|
EXECUTE | CALL | 値 | 必須。ストアド・プロシージャの名前。 |
CALLTYPE | *QUERY | 任意。ストアド・プロシージャで使用する SQL ステートメントのタイプを指定します。 | |
*UPDATE | ストアド・プロシージャの SQL ステートメントが更新、挿入または削除の場合、CALL によって (更新されたレコード数の) 行数が #JSMMSG フィールドに返されます。 | ||
*EXECUTE | このキーワードを指定した場合、ストアド・プロシージャでは何も返されません。 | ||
CALLSYNTAX | *JDBC | 任意。標準の JDBC 構文を使用することを示します。 | |
*ORACLE | Oracle の JDBC 構文を使用することを示します。 | ||
RETURN | *NONE | 任意。ストアド・プロシージャ/ファンクションからの戻り値のデータ・タイプを指定します。 値は何も返されません。 | |
*CHAR | |||
*STRING | |||
*SMALLINT | |||
*INTEGER | |||
*FLOAT | |||
*DOUBLE | |||
*DECIMAL | |||
*NUMERIC | |||
*ORACLECURSOR | 返される値は、Oracle クエリーの結果セットにアクセスする際に代替として使用されるカーソルになります。 |
パラメータは、作業リストやSET PARAMETER(*LIST)コマンドを使用してリモート・プロシージャに渡すことができます。この方法の詳細については、下記「リストと変数」を参照してください。
...
****************** データ開始 *************************************CREATE PROCEDURE JSMJDBC/CALLSELECT(IN CODE CHAR (10))LANGUAGE SQLREADS SQL DATARESULT SETS 1 BEGINDECLARE SQLCODE INTEGER DEFAULT 0;DECLARE SQLSTATE CHARCHAR (5) DEFAULT '00000'; DECLARE C1 CURSOR WITH RETURN TO CLIENT FOR SELECT ID,NAME,AGE FROM JSMJDBC/TBLNAME WHERE ID = CODE; OPEN C1; END ****************** データ終了 ************************************* ****************** データ開始 *************************************CREATE PROCEDURE JSMJDBC/CALLUPDATE(IN CODE CHAR (10))LANGUAGE SQLMODIFIES SQL DATA BEGINDECLARE SQLCODE INTEGER DEFAULT 0;DECLARE SQLSTATE CHARCHAR (5) DEFAULT '00000';DECLARE num_records INTEGER; UPDATE JSMJDBC/TBLNAME SET SALARY=12000.43 WHERE ID = CODE; GET DIAGNOSTICS num_records = ROW_COUNT; RETURN num_records; END
****************** データ終了 ************************************* ****************** データ開始 *************************************CREATE PROCEDURE JSMJDBC/CALLEXECUT(IN CODE CHAR (10))LANGUAGE SQLMODIFIES SQL DATA BEGINDECLARE SQLCODE INTEGER DEFAULT 0;DECLARE SQLSTATE CHARCHAR (5) DEFAULT '00000';DECLARE num_flag INTEGER DEFAULT 0; UPDATE JSMJDBC/TBLNAME SET SALARY=16000.26 WHERE ID = CODE; RETURN num_flag; END
...
SET PARAMETER(*LIST) #WRKLST(PARM1)EXECUTE CALL("CALLSELECT(?)") CALLTYPE(*QUERY)
SET PARAMETER(*LIST) #WRKLST(PARM1)EXECUTE CALL("CALLUPDATE(?)") CALLTYPE(*UPDATE) RETURN(*INTEGER)
SET PARAMETER(*LIST) #WRKLST(PARM1)EXECUTE CALL("CALLEXECUT(?)") CALLTYPE(*EXECUTE) RETURN(*INTEGER)
...
呼び出したプロシージャ(CALLコマンドを使用)にパラメータを渡す必要がある場合、パラメータを含む作業リストを指定する必要があります。この作業リストには、渡す必要があるパラメータと同じだけの列があります。作業リストの最初の行のみが使用されます。リストは、SET PARAMETER(*LIST)コマンドを使用して準備する必要があります。
この仕組みについての詳細は、以下の例と5この仕組みについての詳細は、以下の例と 5.31.12 SQLServiceの例の例を参照してください。SQLServiceの例 を参照してください。
例:
SQLServiceサービスのSET、EXECUTE、READの各コマンドは、それぞれ緊密に関連しています。
...
#JSMCMD := 'Execute("CallSelect(?)") CallType(*QUERY)'Use Builtin Use Builtin (JSM_COMMAND) WithWith_Args(#JSMHND #JSMCMD#JSMHND #JSMCMD) ToTo_Get(#JSMSTS #JSMMSG #WRKLST#JSMSTS #JSMMSG #WRKLST)