社内SEの徒然なる日記

NetCOBOLでのコミットとロールバックの考察

コミットしないとどうなるか?

1本のCOBOLプログラムがそのまま1セッションに対応するので、コミットせずにプログラムが終了されると、ロールバックが実行されたのと同じ結果になります。

複数トランザクション使いたい時は?

複数トランザクションをしたい時は、トランザクションを終了する所でコミットかロールバックを実行してやればOKです。
意識してトランザクションの開始と終了を記述しないといけない言語に比べると、この点は楽ですね。

暗黙のコミット

COBOLに限ったことではないのですが、DDL文が実行されると暗黙的にコミットが実行されます。

例えば、下記の処理をCOBOLで実装したとします。

1. INSERT INTO TDKY(TESTITEM) SELECT TESTITEM FROM ABCD

2. TRUNCATE TABLE ABCD

3. INSERT INTO TDKY(TESTLIST) SELECT TESTLIST FROM EFGH WHERE STCAN = '1'

4. ROOLBACK


1.と3.で、TDKYテーブルに対してINSERTを実行して、4.でロールバックします。
しかし、2.でTRUNCATE(DDL文)が実行されたため、この時点で暗黙的なコミットが実行されます。
その結果、4.のロールバックで取消されるのは、3.のINSERTのみになります。


前回:NetCOBOLでSQLのエラーを確認する
次回:NetCOBOLで動的SQLを使ってみる
投稿記事の一覧 : http://harikofu.blog.fc2.com/blog-entry-22.html

--- blog end ---

スポンサードリンク

PageTop

コメント


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