トランザクションを利用する際の構文は、大きく分けて3つ存在します。
1は開始宣言なので、とくに問題ないでしょう。2と3はどちらもトランザクションの終了時の手続きです。2は処理が成功した場合に処理全体を確定します。3は処理が失敗した場合にトランザクションを取り消して処理前の状態に戻します。
処理を確定する場合(2)にはCOMMIT文を実行します。一方、データベースに対する変更処理をすべて取り消す場合(3)は、ROLLBACK文を実行します。
ここで注意したいのは、COMMIT文が実行されると、ROLLBACK文による処理の取消を行うことができなくなる点です。このため、処理の取消を行う場合は、COMMIT文の発行を行う前にROLLBACK文を実行する必要があります。では、順を追って見ていきましょう。
トランザクションの開始を宣言する構文は次のとおりです。
BEGIN TRANSACTION[TRAN] [トランザクション名]
BEGIN TRANの宣言によって、トランザクションが開始されます。「TRANSACTION」を「TRAN」と略すこともできます。また、トランザクションを入れ子にする場合などでは、トランザクション名を指定します。
このトランザクションの宣言から、処理の確定、もしくは取消の間までに発行されるDML文(INSERT、UPDATE、DELETE)が1つのトランザクションとして取り扱われます。
COMMIT文の構文は次のとおりです。
COMMIT TRANSACTION[TRAN] [トランザクション名]
ROLLBACK文の構文は次のとおりです。
ROLLBACK TRANSACTION[TRAN] [トランザクション名]
ROLLBACK文の発行を行うためには、トランザクションとして実行したデータ更新処理に関する失敗を検知する必要があります。1つのトランザクションの中では複数のDML文が発行されることになりますが、これらのエラーを検知するためには、次に紹介するTRY〜CATCH文を利用します。
TRY〜CATCH文は、C#などでおなじみの例外処理を、ストアドプロシージャの中で実現するための命令文です。
トランザクションを利用する場合の具体的な構文は次のとおりです。
BEGIN TRY
BEGIN TRANSACTION --トランザクションの開始
(DML文の発行)
COMMIT TRANSACTION --トランザクションを確定
END TRY
BEGIN CATCH --例外処理
ROLLBACK TRANSACTION --トランザクションを取り消し
END CATCH
BEGIN TRY〜END TRYブロックの中で実行される命令文について、エラーが発生した場合は処理を中断し、BEGIN CATCH〜END CATCHブロックで定義された命令文を実行します。上記の例であれば、DML文の実行時にエラーが発生した場合、ROLLBACKが実行されることになります。
トランザクション利用に際する構文が分かったところで、早速ストアドプロシージャでトランザクションを利用してみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.