• 締切済み

PRO COBOLでFETCH時に値を変換する

PRO COBOLでoracleデータを読み込むプログラムを変更しようとしています。 元のプログラムは、 ----------------------------- WORKING-STORAGE SECTION. EXEC SQL DECLARE table10c CURSOR FOR SELECT table10.item11, table10.item12 FROM table10,table20 WHERE table10.item13 = table20.item23 END-EXEC --- PROCEDURE DIVISION. EXEC SQL FETCH table10c INTO file-item11, ←出力ファイルの項目1 file-item12 ←出力ファイルの項目2 END-EXEC. ----------------------------- となっていて、item13 と等しい値が table20.item23 にある場合 item11 と item12 の値を順次、ファイルに出力しています。 今回、仕様を変更し、item11の値を変換してファイルに 出力しようとしています。 変換する値は、テーブル:henkan に登録しています。 項目1:old-item ・・・table10.item11にセットしている値 項目2:new-item ・・・file-item11にセットしたい値 WHERE句の条件は、そのままです。 (WHERE table10.item13 = table20.item23) 但し、item11の値は全て変換するわけではなく、 テーブル:henkan に一致するレコードが有る場合のみ つまり table10.item11 = henkan.old-item の場合のみ file-item11 に henkan.new-item の値を出力し、 それ以外の場合には、table10.item11 の値をセットします。 この変更を極力少ないロジックの改修で済ませたく 基本的には 「DECLARE table10c CURSOR」句の変更と したいです。 「SELECT table10.item11,」の項目を変数にして 変換した場合は、henkan.new-item の値をセットし 変換しない場合には、table10.item11 の値をセットできれば 良いのではないかと思っていますが具体的な方法が判りません。 同様の変更を(出力条件等の異なる)複数のプログラムに 行うつもりで「PROCEDURE DIVISION」は、複雑になっているため 変更は最小限としたいです。 PRO COBOLの経験が少なく、アドバイスをお願いします。

みんなの回答

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

EXEC SQL DECLARE table10c CURSOR FOR SELECT henkan.new_item, table10.item12 FROM table10,table20,henkan WHERE table10.item13 = table20.item23 and table10.item11 = henkan.old_item union SELECT table10.item11, table10.item12 FROM table10,table20 WHERE table10.item13 = table20.item23 and table10.item11 not in(select henkan.old_item from henkan) END-EXEC henkanテーブルですが、ハイフンはマイナスとして処理されますので、 使うならアンダーバーを使用してください。 henkan.old_item,henkan.new_item テストしておりませんので、テストしてみてください。

fromJ
質問者

お礼

早い回答ありがとうございます。 試してみます。

すると、全ての回答が全文表示されます。

関連するQ&A