IBM i のQUERYが動かなくなったら?
Question
先日あるファイルのファイルレイアウトの変更をしました。
しかし、変更したファイルを参照しているQUERYを実行時に、ジョブログにQRY1058が出てQUERYが失敗してしまいます。
このエラーはどのような問題でしょうか。どうすれば解消しますか。
Answer
QUERYで使用する参照用のファイルが「レコード様式レベルの検査」を*YESでレベルチェックを行う設定にて作成されている場合に、レコード様式レベルが異なるとQRY1058が出てレベルチェックエラーとなります。
簡単に言ってしまうと、QUERY定義(*QRYDFN)を作成した時のファイルと今使用しようとしているファイルがちょっと違うよ、というエラーです。
該当の設定がされているかどうかは、DSPFD コマンドにて確認ができます。
レコード様式レベルの検査. . . . . . . . . : LVLCHK *YES
コマンド:
CHGPF FILE(LIB/PF) LVLCHK(*NO)
によって無理やり無視することもできますが、QUERY定義(*QRYDFN)を編集で開いて保存し直すことで正しく解消できます。
もし膨大な数のQUERYがある場合、これをプログラムなどで一括・ないし自動で保存し直すことはできるのか気になるところでしょう。
誠に残念ながら答えは「できません」。
QUERY定義(*QRYDFN)の編集はWRKQRYコマンドにて行います。

このコマンドでは画面から実行する操作のオプション番号や、対象となるQUERY定義(*QRYDFN)を選ぶ必要があります。
WRKQRYコマンド自体のコマンドプロンプトを開いていただいても、このように表示するパラメーターがない、といった表示となってしまいます。

レベルチェックをしない設定とするのは、ファイルの実際のフォーマットと、プログラムが想定するフォーマットに差異が出て、正しい動作をしない場合もありますので、お勧めしません。
お手間ではありますがWRKQRYでおひとつずつQUERY定義(*QRYDFN)の保存し直すことをお勧めします。
by . 大熊猫橋