社内SEの徒然なる日記

NetCOBOLで読込中のカーソルのデータを更新したい

なんとなく更新が嫌だ

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 [カーソル名] とだけ指定します。
これで、現在カーソルで指定している行を更新の対象にすることが出来ます。
スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する