前置きが長くなったが、それではまず SQLストアド・プロシージャーを作ってみよう。
CRTSRCPF FILE(MYSRCLIB/QSQLSRC) RCDLEN(112) IGCDTA(*YES) CCSID(65535) AUT(*ALL)
※ CCSID
は 65535 で作成しておくと、あらゆる CCSID
に対応することができる。
CCSID
を 5035 で作成する、との記事がたまに見られるがこれは適切ではない。
ここでは担当者マスター( QTRFIL/TANTOM
) を照会する SQL
による SELECT
文を次のように入力する。
0001.00 DROP PROCEDURE P1; 0002.00 CREATE PROCEDURE P1() 0003.00 RESULT SETS 1 0004.00 LANGUAGE SQL 0005.00 BEGIN 0006.00 DECLARE C1 CURSOR FOR 0007.00 SELECT TACODE, TTNAMJ FROM TANTOM ORDER BY TACODE; 0008.00 OPEN C1; 0009.00 SET RESULT SETS CURSOR C1; 0010.00 END;
【解説】
最初に DROP PROCEDURE P1
はプロシージャーP1
を削除する命令である。
SQL
ではプロシージャーの削除は DELETE
ではなく DROP
を使う。
最初にもし P1
が存在していれば削除する、という意味である。
次に
CREATE PROCEDURE P1()
とは、パラメーターのないプロシージャーP1
をライブラリーQGPL
に作成することを意味する。
もし、指定のライブラリーMYLIB
に作成するのであれば
CREATE PROCEDURE MYLIB/P1()
のように記述する。
CREATE PROCEDURE
の記述は、セミコロンで終了するまで続いている。
CREATE PROCEDURE P1() LANGUAGE SQL BEGIN DECLARE C1 CURSOR FOR SELECT TACODE, TTNAMJ FROM TANTOM ORDER BY TACODE;
まで続いている。
DECLARE C1 CURSOR
は SQL
データ・セットの行を示すカーソルの定義である。
SELECT TACODE, TTNAMJ FROM QTRFIL/TANTOM ORDER BY TACODE;
とは担当者マスター(QTRFIL/TANTOM
) を担当者コード(TACODE
)順に並べて
担当者コード(TACODE
) と担当者名(TTNAMJ
) を表示する SELECT
文である。
OPEN C1; SET RESULT SETS CURSOR C1;
としてカーソルがクローズされていないのは SQL
データ・セットの制御は
ODBCクライアントに渡されるからである。
RUNSQLSTM
コマンドとは SQL
ソース・ファイルに書かれた SQL
文を実行するためのコマンドである。
CREATE PROCEDURE
が SQL
文に書かれているので SQL
プロシージャーのコンパイルを行うことになる。
RUNSQLSTM SRCFILE(MYLIB/QSQLSRC) SRCMBR(P1) COMMIT(*NONE)
として実行してエラーが発生しなければ QGPL
にプロシージャーP1
が作成されているはずである。
DSPPGM QGPL/P1
を実行すれば確認することができる。
もし
RUNSQLSTMコマンドが正しく実行されなかった
とのエラーが発生すればエラー・リストがスプールに出力されているので確認して修正すること。