IBM eSever iSeries専用。RPGとCLPから構成。
(2)プログラム名:EXSQ20R タイプ:RPG
H Y/ 1 FQCLSRC IF E DISK F QCLSRC KRENAMEDBREC F KINFDS W#INFO FEXSQDT IF E DISK A UC F EXSQDT KRENAMETXREC ITXREC 99 I SRCDTA A133 I*レコード数 IW#INFO DS I B 156 1590W#RCD I*先頭52文字=DSPLY命令の表示制限 I DS I 1 80 DW080 I 1 52 DW052 C *ENTRY PLIST C PARM P\CTL 2 情報表示 C* C P#SQ30 PLIST C PARM P\OUT 1 C* C EXSR @INIT C EXSR @MAIN C EXSR @END C* C READ TXREC 91ダミー命令 C* C***************************************************** C* C @INIT BEGSR C* C P\CTL IFEQ 'OK' C SETON 69 表示する C ELSE C SETOF 69 表示しない C ENDIF C* C SETOF 72 1命令単位 C* C ENDSR C***************************************************** C* C @MAIN BEGSR C* C SETOF 91 C *IN91 DOWEQ*OFF C READ DBREC 91 C* C *IN91 IFEQ *ON C 69 'EOF' DSPLY C LEAVE 離脱 C ENDIF C* C MOVELSRCDTA DW080 C* C DW080 IFEQ *BLANK C ITER 次行へ C ENDIF C* C 69 DW052 DSPLY C* C '/*' SCAN DW080 71コメント? C *IN71 IFEQ *ON C MOVELDW080 A133 そのまま C MOVEL'N' P\OUT C* C N72 OPEN EXSQDT C WRITETXREC C CLOSEEXSQDT C SETOF 72 C CALL 'EXSQ30C' P#SQ30 1命令実行 C* C ITER 次行へ C ENDIF C* C ';' SCAN DW080 71デリミタ? C *IN71 IFEQ *ON C ';':' ' XLATEDW080 A133 区切り除去 C MOVEL'Y' P\OUT C* C N72 OPEN EXSQDT C WRITETXREC C CLOSEEXSQDT C SETOF 72 C CALL 'EXSQ30C' P#SQ30 1命令実行 C* C ITER 次行へ C ENDIF C* C N72 OPEN EXSQDT C SETON 72 C MOVELDW080 A133 そのまま C WRITETXREC C* C ENDDO C* C *IN72 IFEQ *ON 最終行 C W#RCD IFEQ 1 C MOVEL'Y' P\OUT 1行のみ C CLOSEEXSQDT C CALL 'EXSQ30C' P#SQ30 1命令実行 C ELSE C MOVEL'N' P\OUT 継続と判断 C CLOSEEXSQDT C CALL 'EXSQ30C' P#SQ30 1命令実行 C ENDIF C ENDIF C* C ENDSR C***************************************************** C* C @END BEGSR C* C 69 '@END' DSPLY C SETON LR C RETRN C* C ENDSR C*****************************************************
追記(2012/3/21):
EXSQDTが無くコンパイルエラーになるときは
CRTSRCPF FILE(QTEMP/EXSQDT) IGCDTA(*YES)
をしておく。
[プログラミング] SELECT命令を一括実行するツールを作成してみた
http://d.hatena.ne.jp/saul/20101125/p1
[プログラミング] SELECT命令一括実行ツールのプログラム例(1/3)
http://d.hatena.ne.jp/saul/20101125/p2
[プログラミング] SELECT命令一括実行ツールのプログラム例(3/3)
http://d.hatena.ne.jp/saul/20101125/p4