あまり意味ないかもしれないけど、備忘録。
使用しているQRY/400の定義からSQL文を逆算して出力する方法。
まずSQLソースファイルを作る。逆算したSQL文を置く場所ですね。
CRTSRCPF FILE(HOGELIB/QSQLSRC) RCDLEN(112) IGCDTA(*YES) TEXT(‘****’)
これでQRPGSRCやQCLSRCなどと同じようにQSQLSRCが出来る。まぁ名前は何でもいいのでしょうけど、とりあえずソースファイルですね。
後はRTVQMQRYコマンドをF4でプロンプトを開いて、パラメータを埋めていく。
QUERY管理プログラム = 作成したQRY名
ライブラリー = QRYを保存しているライブラリ
ソースファイル = QSQLSRC
ライブラリー = HOGELIB
QRYDFNからの・・ = *ONLY
で実行すると、QSQLSRCにソースメンバーとしてテキストが生成される。
これ大丈夫かなぁと思うようなSQL文があるけど、まぁいいか。
さらにCLを組んでライブラリ内の全QRY定義を変換
当たり前の話だけど、DSPOBJDを使ってQRY定義の一覧をファイル出力してそれをCLでREADしながらRTVQMQRYすれば全てのQRY定義を一気に変換できる。
QRY定義を出力する方法は
DSPOBJD OBJ(HOGELIB/*ALL) OBJTYPE(*QRYDFN) OUTPUT(*OUTFILE) OUTFILE(HOGELIB/QRYLST)
これでHOGELIBのQRY定義を、HOGELIBの中にQRYLSTとしてファイル出力することができる。
出力したファイルをこんな感じで回す
PGM
DCLF FILE(HOGELIB/QRYLST)
READ: RCVF RCDFMT(QLIDOBJD)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(END))
RTVQMQRY QMQRY(HOGELIB/&ODOBNM) SRCFILE(HOGELIB/QSQLSRC) ALWQRYDFN(*YES)
GOTO READ
END:
ENDPGM
CPF0864はファイルが読めなかった場合に受け取る。&ODOBNMは出力したファイルの中にあるオブジェクトのフィールド名の変数。
コメント