現在の接続の現在のトランザクションで行う変更を、データベースに恒久的に反映します。
構文:
>>---EXEC SQL--.------------.--->
+-AT db_name-+
>---COMMIT----.--------------.--->
+-WORK---------+
+-TRAN---------+
+-TRANSACTION--+
>---.-----------.---END-EXEC--><
+--RELEASE--+
パラメーター:
AT db_name |
DECLARE DATABASE を使用して宣言されたデータベースの名前。この句は省略可能です。省略すると、現在の接続がコミットされます。この句を指定して、指定された接続が現在の接続と異なる場合は、DECLARE CURSOR 文に関連付けられた接続でコミットが実行されます。 |
WORK |
WORK、TRAN および TRANSACTION は省略可能な同義語です。 |
RELEASE |
RELEASE が指定され、トランザクションが正常にコミットされると、現在の接続は切断されます。 |
例:
* Ensure that multiple records are not inserted for a
* member of staff whose staff_id is 99
EXEC SQL
DELETE FROM staff WHERE staff_id = 99
END-EXEC
* Insert dummy values into table
EXEC SQL
INSERT INTO staff
(staff_id
,last_name
,first_name
,age
,employment_date)
VALUES
(99
,'Lee'
,'Phil'
,19
,'1992-01-02')
END-EXEC
IF SQLCODE NOT = ZERO
DISPLAY 'Error: Could not insert dummy values.'
DISPLAY SQLERRMC
DISPLAY SQLERRML
EXEC SQL DISCONNECT ALL END-EXEC
STOP RUN
END-IF
EXEC SQL
COMMIT
END-EXEC
* Check it was committed OK
IF SQLCODE = ZERO
DISPLAY 'Error: Could not commit values.'
DISPLAY SQLERRMC
DISPLAY SQLERRML
EXEC SQL DISCONNECT CURRENT END-EXEC
STOP RUN
END-IF
DISPLAY 'Values committed.'
* Delete previously inserted data
EXEC SQL
DELETE FROM staff WHERE staff_id = 99
END-EXEC
IF SQLCODE NOT = ZERO
DISPLAY 'Error: Could not delete dummy values.'
DISPLAY SQLERRMC
DISPLAY SQLERRML
EXEC SQL DISCONNECT ALL END-EXEC
STOP RUN
END-IF
* Check data deleted OK, commit and release the connection
IF SQLCODE NOT = ZERO
DISPLAY 'Error: Could not delete values.'
DISPLAY SQLERRMC
DISPLAY SQLERRML
EXEC SQL DISCONNECT ALL END-EXEC
STOP RUN
END-IF
EXEC SQL
COMMIT WORK RELEASE
END-EXEC
* Check data committed OK and release the connection.
IF SQLCODE NOT = ZERO
DISPLAY 'Error: Could not commit and release.'
DISPLAY SQLERRMC
DISPLAY SQLERRML
EXEC SQL DISCONNECT CURRENT END-EXEC
END-IF
DISPLAY 'Values committed and connection released.'