mysql error handler_MySql错误处理(二) - Condition Handle
20.2.10.2.?DECLARE處理程序
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
handler_type:
CONTINUE
| EXIT
| UNDO
condition_value:
SQLSTATE [VALUE] sqlstate_value
| condition_name
| SQLWARNING
| NOT FOUND
| SQLEXCEPTION
| mysql_error_code
這個語句指定每個可以處理一個或多個條件的處理程序。如果產生一個或多個條件,指定的語句被執行。
對一個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 CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1; 這一行不在,第二個INSERT因PRIMARY KEY強制而失敗之后,MySQL可能已經采取 默認(EXIT)路徑,并且SELECT @x可能已經返回2。
總結
以上是生活随笔為你收集整理的mysql error handler_MySql错误处理(二) - Condition Handle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac lion 安装 mysql_ma
- 下一篇: mysql level用法_MYSQL使