CLP初心者です。現在、下記のようなCLPを作成しております。@DSPOBJDでファイル情報一覧を書き出す。AOPENQRYFを使用し、上記@で作成されたファイルの「オブジェクト名」項目をキーとし、をRPGプログラムから渡されたパラメータで検索する。B該当のオブジェクト(物理ファイル)を別のライブラリにコピーする。そこで、OPENQRYFのQRYSLTでエラーになってしまいます。「エラー内容はオペランドがありません」です。おそらく、「オブジェクト名」とパラメータを比較しておりますが、パラメータがオペランドとして認識していないような気がします。ソースを以下に記載しますので、ご教授頂きたく、よろしくお願い致します。/*********************************************************************/ PGM PARM(&PARM01) DCL VAR(&PARM01) TYPE(*CHAR) LEN(256) /* パラメータ */ DCL VAR(&VAND) TYPE(*CHAR) LEN(8) DCLF FILE(CDBFVAN/WDBFVAN) RCDFMT(QLIDOBJD) CHGVAR VAR(&VAND) VALUE(%SST(&PARM01 101 8)) /*ライブラリー・リスト変更*/ CHGLIBL LIBL(QTEMP CDBFVAN CSAVVAN COBJLIB EVXDBLIB + QEVX QGPL QAPS) DLTF FILE(QTEMP/WDBFVAN) MONMSG MSGID(CPF0000) DSPOBJD OBJ(CDBFLIB/*ALL) OBJTYPE(*FILE) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/WDBFVAN) OVRDBF FILE(WDBFVAN) TOFILE(QTEMP/WDBFVAN) SHARE(*YES) OPNQRYF FILE((QTEMP/WDBFVAN *FIRST *ONLY)) + OPTION(*INP) QRYSLT('%SST(ODOBNM 3 8) *LE + &VAND') KEYFLD((ODOBNM *ASCEND *N)) @READ: RCVF RCDFMT(QLIDOBJD) MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(@EOF)) CPYF FROMFILE(CDBFVAN/&ODOBNM) + TOFILE(CSAVVAN/&ODOBNM) CRTFILE(*YES) GOTO CMDLBL(@READ) @EOF: CLOF OPNID(WDBFVAN) DLTOVR FILE(*ALL) ENDPGM
OPNQRYFコマンドの QRYSLTに指定するQUERY選択式で「オペランドがありません」とエラーが発生するということであればQUERY選択式の内容でエラーが発生しているのは間違いないでしょう。例えば%SSTの変数と比較している変数の属性は数値項目なのか、文字項目なのかわかりませんが、&VANDをダブルクォーテーションで囲む等してみてはどうでしょうか。
ご回答ありがとうございます。ご指摘頂いたとおり、""で囲いましたが結果は同じでした。また、下記サイトに文字項目の変数は「"'|<」で囲む例がありましたので、実施したところエラーはななくなりましたが、本当に比較できているかどうか不明です。この囲い方は正式なものなのでしょうか。ご存知でしたらご教授下さい。参考URL:http://iseries.fc2web.com/logic/cycle3.html
こちらでQRTSLTの式で ""を使用した場合でもエラーが発生することなく実行できましたが、因みにこの方法も「"'|<」正式なものです。下記URLに詳しく明記されているので一度ご覧下さい。参考URL:http://popup2.tok2.com/home2/iseries/db2400/opnqryf02.html