mysqlストレージプロシージャエラー処理
2769 ワード
CONTINUEプロセッサの場合、現在のサブルーチンの実行は、プロセッサ文の実行後に続行されます.EXITプロセッサの場合、現在のBEGIN...END複合文の実行が終了します.UNDOハンドラタイプ文はサポートされていません.
・SQLWARNINGは、01で始まるすべてのSQLSTATEコードの速記である.
・NOT FOUNDは、02で始まるすべてのSQLSTATEコードの速記である.
・SQLEXCEPTIONは、SQLWARNINGまたはNOT FOUNDによってキャプチャされていないすべてのSQLSTATEコードの速記である.
SQLSTATE値に加え、MySQLエラーコードもサポートされていません.
例:
なお,@xは3であり,これはMySQLがプログラムの最後に実行されたことを示す.DECLARE CONTINUTE HANDLER FOR SQLSTATE'23000'SET@x 2=1の場合.この行はありません.2番目のINSERTがPRIMARY KEY強制に失敗した後、MySQLはデフォルト(EXIT)パスを取った可能性があり、SELECT@xは2を返した可能性があります.
・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を返した可能性があります.