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
Cette commande spécifie les gestionnaires qui vont traiter une ou plusieurs conditions. Si une de ces conditions survient, le gestionnaire associé est appelé.
Pour un gestionnaire CONTINUE, l'exécution
de la routine courante continue après l'exécution du
gestionnaire. Pour un gestionnaire EXIT,
l'exécution de la routine est terminée. Le gestionnaire
UNDO n'est pas encore supporté.
Actuellement, UNDO se comporte comme
CONTINUE.
SQLWARNING est un raccourci pour toutes
les codes SQLSTATE qui commencent par
01.
NOT FOUND est un raccourci pour toutes
les codes SQLSTATE qui commencent par
02.
EXCEPTION est un raccourci pour toutes
les codes SQLSTATE qui ne sont pas
représenté par SQLWARNING ou
NOT FOUND.
En plus des valeurs SQLSTATE, les codes
d'erreur MySQL sont aussi supportés.
Par exemple :
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)
Notez que @x vaut 3, ce qui signifie que
MySQL a exécuté la procédure jusqu'à la fin. Si la ligne
DECLARE CONTINUE HANDLER FOR '23000' SET @x2 =
1; était absente, MySQL aurait pris le chemin par
défaut (EXIT) après l'échec du second
INSERT, dû à la contrainte de
PRIMARY KEY, et SELECT
@x aurait retourné 2.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
