IBM eSever iSeries専用。RPGとCLPから構成。
(3)プログラム名:EXSQ30C タイプ:CLP
PGM PARM(&POUT) DCL VAR(&POUT) TYPE(*CHAR) LEN(1) DCL VAR(&WSID) TYPE(*CHAR) LEN(10) DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&NBR) TYPE(*CHAR) LEN(06) DCL VAR(&RCDS) TYPE(*DEC) LEN(10 0) /*開始*/ RTVJOBA JOB(&WSID) USER(&USER) NBR(&NBR) /*2回目以降のとき、セパレータを実行ログ用ファイルに追加する*/ RTVMBRD FILE(QTEMP/EXSQLLG) NBRCURRCD(&RCDS) IF COND(&RCDS *GE 1) THEN(DO) CPYF FROMFILE(TOOLLIB/EXSQF1) + TOFILE(QTEMP/EXSQLLG) + TOMBR(EXSQLLG) MBROPT(*ADD) FMTOPT(*NOCHK) ENDDO /*実行するSELECT命令を実行ログ用ファイルに追加する*/ CPYF FROMFILE(QTEMP/EXSQDT) TOFILE(QTEMP/EXSQLLG) + FROMMBR(EXSQDT) TOMBR(EXSQLLG) + MBROPT(*ADD) FMTOPT(*CVTSRC) /*コメント行ならば、ログに残すだけ*/ IF COND(&POUT *EQ 'N') THEN(GOTO CMDLBL(TAG900)) /*1つのSELECT命令になっているので、CRTQMQRYしてSTRQMQRYする*/ /* QPQXPRTFの名前で実行結果がスプール出力される*/ DLTQMQRY QMQRY(QTEMP/EXESQL) MONMSG MSGID(CPF0000) CRTQMQRY QMQRY(QTEMP/EXESQL) SRCFILE(QTEMP/EXSQDT) + SRCMBR(EXSQDT) STRQMQRY QMQRY(QTEMP/EXESQL) OUTPUT(*PRINT) MONMSG MSGID(QWM2701) EXEC(DO) CPYF FROMFILE(TOOLLIB/EXSQF2) + TOFILE(QTEMP/EXSQLLG) + TOMBR(EXSQLLG) MBROPT(*ADD) FMTOPT(*NOCHK) ENDDO /*実行結果の印刷を吸い上げて、1つのメンバーに書きだす*/ CPYSPLF FILE(QPQXPRTF) TOFILE(QTEMP/EXSQLLG) + JOB(&NBR/&USER/&WSID) SPLNBR(*LAST) + MBROPT(*ADD) MONMSG MSGID(CPF3303 CPF3309 CPF3342 CPF3344 CPF3478) DLTSPLF FILE(QPQXPRTF) JOB(&NBR/&USER/&WSID) + SPLNBR(*LAST) MONMSG MSGID(CPF3303 CPF3309 CPF3342 CPF3344 CPF3478) TAG900: /*実行するSELECT命令ファイルを、次のループの為に消去する*/ CLRPFM FILE(QTEMP/EXSQDT) MBR(EXSQDT) MONMSG MSGID(CPF0000) TAG999: ENDPGM
(注1)TOOLLIB/EXSQF1とは、セパレータとして文字"----+----:"で80桁になる1行のレコードを事前に準備。
(注2)TOOLLIB/EXSQF2とは、「SELECT命令が正しく実行されませんでした。」というメッセージの1行のレコードを事前に準備。
[プログラミング] SELECT命令を一括実行するツールを作成してみた
http://d.hatena.ne.jp/saul/20101125/p1
[プログラミング] SELECT命令一括実行ツールのプログラム例(1/3)
http://d.hatena.ne.jp/saul/20101125/p2
[プログラミング] SELECT命令一括実行ツールのプログラム例(2/3)
http://d.hatena.ne.jp/saul/20101125/p3