DFU Query SQL

41. 作って理解する SQLストアド・プロシージャー (4)

前置きが長くなったが、それではまず 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 CURSORSQLデータ・セットの行を示すカーソルの定義である。

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 PROCEDURESQL文に書かれているので SQLプロシージャーのコンパイルを行うことになる。

RUNSQLSTM SRCFILE(MYLIB/QSQLSRC) SRCMBR(P1) COMMIT(*NONE)

として実行してエラーが発生しなければ QGPL にプロシージャーP1 が作成されているはずである。

DSPPGM QGPL/P1

を実行すれば確認することができる。

もし

RUNSQLSTMコマンドが正しく実行されなかった

とのエラーが発生すればエラー・リストがスプールに出力されているので確認して修正すること。