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