| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
DECLARE Handlers
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
|
This statement specifies handlers that each may deal with one or more conditions. If one of these conditions occurs, the specified statement is executed.
For a CONTINUE handler, execution of the current routine continues
after execution of the handler statement. For an EXIT handler,
execution of the current routine is terminated. The UNDO
handler_type is not yet supported. UNDO currently behaves like
CONTINUE.
SQLWARNING is shorthand for all SQLSTATE codes that begin with 01.
NOT FOUND is shorthand for all SQLSTATE codes that begin with 02.
EXCEPTION is shorthand for all SQLSTATE codes not caught by
SQLWARNING or NOT FOUND.
In addition to SQLSTATE values, MySQL error codes are also supported.
For example:
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 '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)
|
Notice that @x is 3, which shows that MySQL executed to the end of
the procedure. If the line
DECLARE CONTINUE HANDLER FOR '23000' SET @x2 = 1;
had not been present, MySQL would have taken the default (EXIT) path
after the second INSERT failed due to the PRIMARY KEY
constraint, and SELECT @x would have returned 2.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |