COBOLで学ぶCOMMITとROLLBACKの基本!トランザクション管理を理解しよう
生徒
「先生、COBOLでデータベースにINSERTやUPDATEしたあと、確定させる方法ってありますか?」
先生
「はい、それがCOMMITです。COMMITを実行すると、データベースに加えた変更が確定されます。」
生徒
「逆にやっぱり変更を取り消したいときは?」
先生
「その場合はROLLBACKを使います。ROLLBACKは、コミット前の変更を元に戻す命令です。」
1. トランザクションとは?
トランザクションとは、データベースに対して行う一連の処理のまとまりです。例えば、銀行の振込処理を考えると、口座Aからお金を引き落とし、口座Bに入金する操作はセットで実行されるべきです。途中で失敗した場合、片方だけ変更されると不整合が起きます。これを防ぐために、COBOLではCOMMITやROLLBACKを使ってトランザクション管理を行います。
2. COMMITとは?
COMMITは、データベースに加えた変更を確定させるSQL文です。確定後は元に戻せません。COBOLでは以下のように書きます。
EXEC SQL
COMMIT
END-EXEC.
例えば、社員情報を追加した後にCOMMITを実行すると、追加したデータがデータベースに保存されます。
3. ROLLBACKとは?
ROLLBACKは、コミット前の変更を取り消すSQL文です。途中でエラーが発生した場合や、条件によって変更を無効にしたい場合に使用します。
EXEC SQL
ROLLBACK
END-EXEC.
例えば、社員情報の更新中にエラーが起きた場合、ROLLBACKを実行すると変更は元に戻ります。
4. トランザクション管理の流れ
COBOLでデータベース操作を行うときの基本的な流れは以下の通りです。
- INSERT、UPDATE、DELETEなどでデータを変更する。
- SQLCODEやSQLSTATEでエラーをチェックする。
- 問題がなければCOMMITで変更を確定する。
- エラーが発生した場合はROLLBACKで変更を取り消す。
この流れを守ることで、安全にデータベースを操作できます。
5. 実践例:社員情報の更新とトランザクション管理
WORKING-STORAGE SECTION.
01 EMP-ID PIC 9(4) VALUE 1001.
01 NEW-SALARY PIC 9(5) VALUE 50000.
PROCEDURE DIVISION.
EXEC SQL
UPDATE EMPLOYEE
SET SALARY = :NEW-SALARY
WHERE EMPLOYEE_ID = :EMP-ID
END-EXEC.
IF SQLCODE = 0
EXEC SQL
COMMIT
END-EXEC
DISPLAY "更新成功:" EMP-ID " の給与を確定しました。"
ELSE
EXEC SQL
ROLLBACK
END-EXEC
DISPLAY "更新失敗:" SQLCODE
END-IF.
更新成功:1001 の給与を確定しました。
この例では、社員IDが1001の給与を更新し、SQLCODEを確認して成功ならCOMMIT、失敗ならROLLBACKしています。トランザクション管理の基本的な流れを理解するのに最適です。
6. 初心者向けポイント
COMMITとROLLBACKは、データベース操作を安全に行うために非常に重要です。エラー発生時にROLLBACKで元に戻す、正常終了時にCOMMITで確定する、という基本の流れを覚えることが大切です。トランザクション管理を理解することで、データの整合性を保ちながら、COBOLでのデータベース操作を安全に行えるようになります。