DECLAREhandler_typeHANDLER FORcondition_value[,...]statementhandler_type: CONTINUE | EXIT | UNDOcondition_value: SQLSTATE [VALUE]sqlstate_value|condition_name| SQLWARNING | NOT FOUND | SQLEXCEPTION |mysql_error_code
          Die DECLARE ... HANDLER-Anweisung
          deklariert Handler, die jeweils eine oder mehrere Bedingungen
          behandeln können. Wenn eine dieser Bedingungen eintritt, wird
          das angegebene statement
          ausgeführt. statement kann eine
          einfache Anweisung sein (beispielsweise SET
          ) oder auch eine
          zusammengesetzte Anweisung in einem var_name =
          valueBEGIN
          ... END-Block (siehe
          Abschnitt 19.2.5, „BEGIN ... END-Syntax für komplexe Anweisungen“).
        
          Ein CONTINUE-Handler lässt die Ausführung
          der aktuellen Routine nach der Ausführung der
          Handler-Anweisung weiterlaufen. Ein
          EXIT-Handler dagegen beendet die
          Ausführung für die zusammengesetzte BEGIN ...
          END-Anweisung, in der er deklariert ist. (Das gilt
          selbst dann, wenn die Bedingung in einem inneren Block
          eintritt.) Eine Anweisung des Typs
          UNDO-Handler wird zurzeit noch nicht
          unterstützt.
        
          Wenn eine Bedingung eintritt, für die kein Handler deklariert
          wurde, ist die Standardaktion ein EXIT.
        
          Ein condition_value kann einer der
          folgenden Werte sein:
        
Ein SQLSTATE-Wert oder MySQL-Fehlercode.
              Ein zuvor mit DECLARE ... CONDITION
              deklarierter Bedingungsname. Siehe
              Abschnitt 19.2.8.1, „DECLARE-Bedingungen“.
            
              SQLWARNING ist eine Abkürzung für
              alle SQLSTATE-Codes, die mit 01
              beginnen.
            
              NOT FOUND ist eine Abkürzung für alle
              SQLSTATE-Codes, die mit 02 beginnen.
            
              SQLEXCEPTION ist eine Abkürzung für
              alle SQLSTATE-Codes, die nicht unter
              SQLWARNING oder NOT
              FOUND fallen.
            
Beispiel:
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)
          Dieses Beispiel verbindet einen Handler mit der Bedingung
          SQLSTATE 23000, die bei doppelten Schlüsselwerten eintritt.
          Beachten Sie, dass @x die
          3 ist: Dies zeigt, dass MySQL die Prozedur
          bis zum Ende ausgeführt hat. Wäre die Zeile DECLARE
          CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
          nicht vorhanden, hätte MySQL den Standardweg
          (EXIT) eingeschlagen, nachdem das zweite
          INSERT an dem PRIMARY
          KEY-Constraint gescheitert ist, und SELECT
          @x hätte eine 2 zurückgegeben.
        
          Wenn Sie eine Bedingung ignorieren möchten, können Sie einen
          CONTINUE-Handler für sie deklarieren und
          mit einem leeren Block verbinden. Zum Beispiel:
        
DECLARE CONTINUE HANDLER FOR SQLWARNING BEGIN END;
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

