前置きが長くなったが、それではまず SQLストアド・プロシージャーを作ってみよう。
(1). SQLソース・ファイルを作成する
CRTSRCPF FILE(MYSRCLIB/QSQLSRC) RCDLEN(112) IGCDTA(*YES) CCSID(65535) AUT(*ALL)
※ CCSID は 65535 で作成しておくと、あらゆる CCSID に対応することができる。
CCSID を 5035 で作成する、との記事がたまに見られるがこれは適切ではない。
(2). SEU によって SQLソースを入力する
ここでは担当者マスター( 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クライアントに渡されるからである。
(3). RUNSQLSTM によって実行する
RUNSQLSTMコマンドとは SQLソース・ファイルに書かれた SQL文を実行するためのコマンドである。
CREATE PROCEDURE が SQL文に書かれているので SQLプロシージャーのコンパイルを行うことになる。
RUNSQLSTM SRCFILE(MYLIB/QSQLSRC) SRCMBR(P1) COMMIT(*NONE)
として実行してエラーが発生しなければ QGPL にプロシージャーP1 が作成されているはずである。
DSPPGM QGPL/P1
を実行すれば確認することができる。
もし
RUNSQLSTMコマンドが正しく実行されなかった
とのエラーが発生すればエラー・リストがスプールに出力されているので確認して修正すること。