PL / SQL-トランザクション

この章では、PL / SQLでのトランザクションについて説明します。データベースtransaction1つ以上の関連するSQLステートメントで構成される可能性のあるアトミックな作業単位です。トランザクションを構成するSQLステートメントによってもたらされるデータベースの変更は、まとめてコミットできる、つまりデータベースに永続的にするか、データベースからロールバック(元に戻す)できるため、アトミックと呼ばれます。

正常に実行されたSQLステートメントとコミットされたトランザクションは同じではありません。SQLステートメントが正常に実行された場合でも、ステートメントを含むトランザクションがコミットされない限り、SQLステートメントをロールバックして、ステートメントによって行われたすべての変更を元に戻すことができます。

トランザクションの開始と終了

トランザクションには beginningend。次のいずれかのイベントが発生すると、トランザクションが開始されます-

  • 最初のSQLステートメントは、データベースに接続した後に実行されます。

  • トランザクションの完了後に発行された新しいSQLステートメントごと。

次のいずれかのイベントが発生すると、トランザクションは終了します-

  • A COMMIT または ROLLBACK ステートメントが発行されます。

  • A DDL などのステートメント CREATE TABLEステートメントは、発行されます。その場合、COMMITが自動的に実行されるためです。

  • A DCL などのステートメント GRANTステートメントは、発行されます。その場合、COMMITが自動的に実行されるためです。

  • ユーザーがデータベースから切断します。

  • ユーザーはから終了します SQL*PLUS 発行することにより EXIT コマンドを実行すると、COMMITが自動的に実行されます。

  • SQL * Plusが異常終了します。 ROLLBACK 自動的に実行されます。

  • A DMLステートメントは失敗します。その場合、そのDMLステートメントを元に戻すためにROLLBACKが自動的に実行されます。

トランザクションのコミット

SQLコマンドCOMMITを発行すると、トランザクションが永続的になります。COMMITコマンドの一般的な構文は次のとおりです。

COMMIT;

例えば、

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (6, 'Komal', 22, 'MP', 4500.00 ); 

COMMIT;

トランザクションのロールバック

COMMITを使用せずにデータベースに加えられた変更は、ROLLBACKコマンドを使用して元に戻すことができます。

ROLLBACKコマンドの一般的な構文は次のとおりです。

ROLLBACK [TO SAVEPOINT < savepoint_name>];

システム障害などの前例のない状況が原因でトランザクションが中止された場合、コミット以降のトランザクション全体が自動的にロールバックされます。使用していない場合savepoint、次に、次のステートメントを使用して、すべての変更をロールバックします-

ROLLBACK;

セーブポイント

セーブポイントは、いくつかのチェックポイントを設定することにより、長いトランザクションをより小さな単位に分割するのに役立つ一種のマーカーです。長いトランザクション内でセーブポイントを設定することにより、必要に応じてチェックポイントにロールバックできます。これは、を発行することによって行われますSAVEPOINT コマンド。

SAVEPOINTコマンドの一般的な構文は次のとおりです。

SAVEPOINT < savepoint_name >;

例えば

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (7, 'Rajnish', 27, 'HP', 9500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (8, 'Riddhi', 21, 'WB', 4500.00 ); 
SAVEPOINT sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000; 
ROLLBACK TO sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 7; 
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 8; 

COMMIT;

ROLLBACK TO sav1 −このステートメントは、セーブポイントsav1をマークしたポイントまでのすべての変更をロールバックします。

その後、行った新しい変更が開始されます。

自動トランザクション制御

実行するには COMMIT いつでも自動的に INSERT, UPDATE または DELETE コマンドを実行すると、 AUTOCOMMIT −としての環境変数

SET AUTOCOMMIT ON;

次のコマンドを使用して、自動コミットモードをオフにすることができます-

SET AUTOCOMMIT OFF;