SELECT命令一括実行ツールのプログラム例(1/3)

IBM eSever iSeries専用。RPGとCLPから構成。
(1)プログラム名:EXSQ10C  タイプ:CLP

PGM        PARM(&PLIB &PSRC &PMBR &PCTL)
DCL        VAR(&PLIB) TYPE(*CHAR) LEN(10)
DCL        VAR(&PSRC) TYPE(*CHAR) LEN(10)
DCL        VAR(&PMBR) TYPE(*CHAR) LEN(10)
DCL        VAR(&PCTL) TYPE(*CHAR) LEN(10)
DCL        VAR(&WCTL) TYPE(*CHAR) LEN(2)
DCL        VAR(&WSID) TYPE(*CHAR) LEN(10)
DCL        VAR(&USER) TYPE(*CHAR) LEN(10)
DCL        VAR(&NBR)  TYPE(*CHAR) LEN(06)
/*開始*/
RTVJOBA    JOB(&WSID) USER(&USER) NBR(&NBR)
ADDLIBLE   LIB(TOOLLIB) POSITION(*LAST)
MONMSG     MSGID(CPF0000)
DLTOVR     FILE(*ALL)
/*一時的用の、1つのSELECT命令ファイルの作成*/
DLTF       FILE(QTEMP/EXSQDT)
MONMSG     MSGID(CPF0000)
CRTSRCPF   FILE(QTEMP/EXSQDT) IGCDTA(*YES)
/* CPYSRCF    FROMFILE(TOOLLIB/EXSQDT) +
             TOFILE(QTEMP/EXSQDT) FROMMBR(EXSQDT) +
             TOMBR(EXSQDT) MBROPT(*ADD)  */
ADDPFM     FILE(QTEMP/EXSQDT) MBR(EXSQDT)
CLRPFM     FILE(QTEMP/EXSQDT) MBR(EXSQDT)
/*一時的用の、実行結果ファイルの作成*/
CPYF       FROMFILE(TOOLLIB/TEXTDATA) +
             TOFILE(QTEMP/EXSQLLG) TOMBR(EXSQLLG) +
             MBROPT(*REPLACE) CRTFILE(*YES)
CLRPFM     FILE(QTEMP/EXSQLLG)
CHGPF      FILE(QTEMP/EXSQLLG) SIZE(*NOMAX)
/*一時的用に、SQLソースファイルの作成*/
/* メンバー SAMPLEMBR にレコード様式 QCLSRC がない。*/
/* というエラーに対応するための仕掛け */
CHKOBJ     OBJ(QTEMP/QCLSRC) OBJTYPE(*FILE)
MONMSG     MSGID(CPF9801) EXEC(DO)
CRTSRCPF   FILE(QTEMP/QCLSRC) IGCDTA(*YES)
ENDDO
CPYSRCF    FROMFILE(&PLIB/&PSRC) TOFILE(QTEMP/QCLSRC) +
             FROMMBR(&PMBR)
/* RPG用一時指定変更*/
OVRDBF     FILE(QCLSRC) TOFILE(QTEMP/QCLSRC) MBR(&PMBR)
OVRDBF     FILE(EXSQDT) TOFILE(QTEMP/EXSQDT) +
             MBR(EXSQDT)
/*  DSPLY命令を実行するかしないか */
IF         COND(&PCTL *EQ 'DISPLAY') THEN(DO)
CHGVAR     VAR(&WCTL) VALUE('OK')
ENDDO
ELSE DO
CHGVAR     VAR(&WCTL) VALUE('NO')
ENDDO
/*  SNDPGMMSG  MSG('開始') MSGTYPE(*INFO) */
CALL       PGM(EXSQ20R) PARM(&WCTL)
/*  SNDPGMMSG  MSG('終了') MSGTYPE(*INFO) */
/*実行結果ファイルを保存する */
CPYF       FROMFILE(QTEMP/EXSQLLG) TOFILE(&PLIB/WSQLLOG) +
             MBROPT(*REPLACE) CRTFILE(*YES)
TAG888:
DLTOVR     FILE(*ALL)
/*  RUNQRY を実行するかしないか  */
IF         COND(&PCTL *EQ 'QRY') THEN(DO)
RUNQRY     QRYFILE((QTEMP/EXSQLLG))
ENDDO
TAG999:
ENDPGM

(注1)TOOLLIB/TEXTDATAは、133桁のレコード長のファイル。事前に準備。ここの環境では使いまわしている。
追記(2012/3/21):
(1)DDSを用意してCRTPFをする。
(2)198桁でも動作する。

     A          R DTREC            
     A            TEXTDATA     198O

[プログラミング] SELECT命令を一括実行するツールを作成してみた
http://d.hatena.ne.jp/saul/20101125/p1
[プログラミング] SELECT命令一括実行ツールのプログラム例(2/3)
http://d.hatena.ne.jp/saul/20101125/p3
[プログラミング] SELECT命令一括実行ツールのプログラム例(3/3)
http://d.hatena.ne.jp/saul/20101125/p4