0
私の要件は、重複した電話番号(無効な電話番号、ハードコードされた16の電話番号のセット)を含むdb2テーブルからデータを削除することです。シーケンス番号(最小値)。コボルのDB2/Cursorプログラム
は、メインテーブルには、データを以下のい考慮する:PHONE_TAB
Client_Id Phone_num Seq_num
1234 45678 15 --- delete
4444 55555 45
1234 45678 10 ---should be retained
5555 22222 25
1234 45678 20 --- delete
1234 45678 11 --- delete
注:また、私は、バックアップを取るために削除する前に、出力テープファイルに削除される行を移動する必要があります。
ロジック以下、 宣言カーソルが出ている:最後に、DELETE-PARA
をEXEC SQL
DECLARE CUR1 CURSOR WITH HOLD FOR
SELECT * FROM PHONE_TAB WHERE PHONE_NUM = 45678
END-EXEC
FETCH-PARAを
EXEC SQL
FETCH CUR1 INTO :DCLGEN_CLIENT_ID
:DCLGEN_PHONE_NUM
:DCLGEN_SEQ_NUM
END-EXEC
VALIDATE-PARA
EXEC SQL
SELECT MIN(SEQ_NUM) FROM PHONE_TAB
WHERE CLIENT_ID = :DCLGEN_CLIENT_ID
PHONE_NUM = :DCLGEN_PHONE_NUM GROUP BY CLIENT_ID AND PHONE_NUM
INTO WS_MIN
END-EXEC
EVALUATE TRUE
WHEN SEQ_NUM > WS_MIN
PERFORM BACKUP-PARA
WHEN OTHER
PERFORM FETCH-PARA
EXEC SQL
DELETE FROM PHONE_TAB WHERE CURRENT CURSOR
END-EXEC
この論理が正しいかどうか誰かに教えてもらえますか? テープファイルにバックアップせずに一括削除するかどうか疑問です。
おかげ
なぜこれがhttps://stackoverflow.com/questions/47152124/mainframe-cobol-db2-delete-programと違うのか説明してください(追加情報の編集が必要な場合があります) –
@SimonSobischまずは編集しようとしました同じ質問ですが、明らかにできませんでした!それは私がここにコードとカーソルの使用法を含んでいるところが違っている。 – user8898467
@SimonSobischは混乱のためにお詫び!流れの上に積み重ねるために新しいものがあるから...最初にコードとクエリをポストするようには知らなかった – user8898467