mysqlストレージプロシージャエラー処理

2769 ワード

CONTINUEプロセッサの場合、現在のサブルーチンの実行は、プロセッサ文の実行後に続行されます.EXITプロセッサの場合、現在のBEGIN...END複合文の実行が終了します.UNDOハンドラタイプ文はサポートされていません.
・SQLWARNINGは、01で始まるすべてのSQLSTATEコードの速記である.
・NOT FOUNDは、02で始まるすべてのSQLSTATEコードの速記である.
・SQLEXCEPTIONは、SQLWARNINGまたはNOT FOUNDによってキャプチャされていないすべてのSQLSTATEコードの速記である.
SQLSTATE値に加え、MySQLエラーコードもサポートされていません.
例:
mysql> CREATE TABLE test.t (s1 int,primary key (s1));
Query OK, 0 rows affected (0.00 sec)
 
mysql> delimiter //
 
mysql> CREATE PROCEDURE handlerdemo ()
    -> BEGIN
    ->   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
    ->   SET @x = 1;
    ->   INSERT INTO test.t VALUES (1);
    ->   SET @x = 2;
    ->   INSERT INTO test.t VALUES (1);
    ->   SET @x = 3;
    -> END;
    -> //
Query OK, 0 rows affected (0.00 sec)
 
mysql> CALL handlerdemo()//
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT @x//
    +------+
    | @x   |
    +------+
    | 3    |
    +------+
    1 row in set (0.00 sec)

なお,@xは3であり,これはMySQLがプログラムの最後に実行されたことを示す.DECLARE CONTINUTE HANDLER FOR SQLSTATE'23000'SET@x 2=1の場合.この行はありません.2番目のINSERTがPRIMARY KEY強制に失敗した後、MySQLはデフォルト(EXIT)パスを取った可能性があり、SELECT@xは2を返した可能性があります.