SQL Engine Reference (v11)

RELEASE SAVEPOINT

RELEASE SAVEPOINT ステートメントを使用して、セーブポイントを削除します。

構文

RELEASE SAVEPOINT セーブポイント名 
 
セーブポイント名 ::= ユーザー定義名 

備考

AUTOCOMMIT がオフの場合、RELEASEROLLBACK、および SAVEPOINT はセッション レベル(ストアド プロシージャの外部)でのみサポートされます。そうでない場合、RELEASEROLLBACK、および SAVEPOINT はストアド プロシージャ内で使用しなければなりません。

ストアド プロシージャ内でコミットされたステートメントは、呼び出し元の ODBC アプリケーションの一番外側のトランザクションによって制御されます。これはつまり、SQLSetConnectOption で指定された AUTOCOMMIT モードに従って、ODBC アプリケーションから外部的に呼び出しているストアド プロシージャが、2 種類ある動作のうち 1 つを実行するということです。自動的にコミットする(AUTOCOMMIT がオン、デフォルト)か、SQLTransact が SQL_COMMIT または SQL_ROLLBACK で呼び出されるのを待つ(AUTOCOMMIT がオフに設定されている場合)のいずれかです。

次の例では、SAVEPOINT を設定し、その後で条件を調べて SAVEPOINTROLLBACK するか RELEASE するかが判断されます。

CREATE PROCEDURE Enroll_student( IN :student ubigint, IN :classnum INTEGER); 
BEGIN 
  DECLARE :CurrentEnrollment INTEGER; 
  DECLARE :MaxEnrollment INTEGER; 
  SAVEPOINT SP1; 
  INSERT INTO Enrolls VALUES (:student, :classnum, 0.0); 
  SELECT COUNT(*) INTO :CurrentEnrollment FROM Enrolls WHERE class_id = :classnum; 
  SELECT Max_size INTO :MaxEnrollment FROM Class WHERE ID = :classnum; 
  IF :CurrentEnrollment >= :MaxEnrollment THEN 
    ROLLBACK TO SAVEPOINT SP1; 
  ELSE 
    RELEASE SAVEPOINT SP1; 
  END IF; 
END; 

COUNT(式) によって、述部にある式の非ヌル値がすべてカウントされるということを覚えておいてください。COUNT(*) ではヌル値を含むすべての値がカウントされます。

関連項目

CREATE PROCEDURE

ROLLBACK

SAVEPOINT


PUBLIC

RESTRICT