
なんとなく更新が嫌だ
SELECT文でデータを抽出して、COBOL側で値を編集、その結果を書き戻すっていう単純なプログラムを作ってみました。
SELECT文を発行します。FOR UPDATEでロックしておきます。
EXEC SQL DECLARE CU1 CURSOR FOR
SELECT
ABCD.NUMMGR , -- 管理番号
ABCD.NUMRCD -- 記録番号
FROM
ABCD
WHERE
ABCD.NUMMGR = 123456
FOR UPDATE
END-EXEC.
*> カーソルオープン
EXEC SQL
OPEN CU1
END-EXEC.
フェッチします。
EXEC SQL
FETCH CU1
INTO
:H-NUMMGR , -- 管理番号
:H-NUMRCD -- 記録番号
END-EXEC.
COBOL側で値を書き換えます。
IF H-NUMRCD = "1"
MOVE "5" TO H-NUMRCD
END-IF.
んで、更新します。
UPDATE ABCD
SET
ABCD.NUMMGR = NVL(ABCD.NUMMGR, 0) , -- 管理番号
ABCD.NUMRCD = RTRIM(ABCD.NUMRCD) -- 記録番号
WHERE
ABCD.NUMMGR = 123456
ABCD.NUMMGRは、PrimaryKeyなので、別にこれでも問題は無いのですが、なんとなーく気持ち悪いです。
こうしてみた
という訳で、こうしてみました。
UPDATE ABCD
SET
ABCD.NUMMGR = NVL(ABCD.NUMMGR, 0) , -- 管理番号
ABCD.NUMRCD = RTRIM(ABCD.NUMRCD) -- 記録番号
WHERE
CURRENT OF CU1 -- カーソルで指定(フェッチ)している行
WHERE条件に、CURRENT OF [カーソル名] とだけ指定します。
これで、現在カーソルで指定している行を更新の対象にすることが出来ます。
スポンサードリンク


