DECLARE une condition
<<<
DECLARE un gestionnaire Syntaxe des procédures stockées
>>>

20.1.7 Conditions et gestionnaires
20.1 Syntaxe des procédures stockées
20 Procédures stockées et fonctions
 Manuel de Référence MySQL 4.1 : Version Française

DECLARE une condition
->DECLARE un gestionnaire

20.1.7.2 DECLARE un gestionnaire


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.

<< DECLARE un gestionnaire >>
DECLARE une condition Conditions et gestionnaires Syntaxe des procédures stockées