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
這個(gè)語(yǔ)句指定每個(gè)可以處理一個(gè)或多個(gè)條件的處理程序。如果產(chǎn)生一個(gè)或多個(gè)條件,指定的語(yǔ)句被執(zhí)行。
對(duì)一個(gè)CONTINUE處理程序,當(dāng)前子程序的執(zhí)行在執(zhí)行 處理程序語(yǔ)句之后繼續(xù)。對(duì)于EXIT處理程序,當(dāng)前BEGIN...END復(fù)合語(yǔ)句的執(zhí)行被終止。UNDO 處理程序類型語(yǔ)句還不被支持。
·???????? SQLWARNING是對(duì)所有以01開(kāi)頭的SQLSTATE代碼的速記。
·???????? NOT FOUND是對(duì)所有以02開(kāi)頭的SQLSTATE代碼的速記。
·???????? SQLEXCEPTION是對(duì)所有沒(méi)有被SQLWARNING或NOT FOUND捕獲的SQLSTATE代碼的速記。
除了SQLSTATE值,MySQL錯(cuò)誤代碼也不被支持。
例如:
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被執(zhí)行到程序的末尾。如果DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1; 這一行不在,第二個(gè)INSERT因PRIMARY KEY強(qiáng)制而失敗之后,MySQL可能已經(jīng)采取 默認(rèn)(EXIT)路徑,并且SELECT @x可能已經(jīng)返回2。
總結(jié)
以上是生活随笔為你收集整理的mysql error handler_MySql错误处理(二) - Condition Handle的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mac lion 安装 mysql_ma
- 下一篇: 新手教程:苹果iPhone 14 Pro