DECLARE HANDLER

Sintassi

DECLARE tipo_handler HANDLER
    FOR condizione [, condizione] ...
    istruzione

tipo_handler:
    CONTINUE
  | EXIT 
  | UNDO

condizione:
    SQLSTATE [VALUE] valore_sqlstate
  | nome_condizione
  | SQLWARNING
  | NOT FOUND
  | SQLEXCEPTION
  | codice_errore_mariadb

Spiegazione

L'istruzione DECLARE ... HANDLER specifica un handler che può gestire una o più condizioni. Se una di queste condizioni si verifica, l'istruzione specificata viene eseguita. Essa può essere un comando semplice (per esempio, SET nome_var = valore), o un'istruzione composta scritta con BEGIN e END.

Nel caso degli handler di tipo CONTINUE, dopo l'esecuzione dell'istruzione il programma continua a girare. Nel caso di un handler EXIT, l'esecuzione del blocco BEGIN ... END in cui si trova l'handler viene terminata. Questo avviene anche se la condizione si verifica in un blocco più interno. Il tipo di handler UNDO non è supportato.

Se si verifica una condizione per la quale non è stato dichiarato alcun handler, l'azione predefinita è EXIT.

La clausola condizione può assumere uno dei seguenti valori:

  • Un valore SQLSTATE (astringa letterale di 5 caratteri) o un codice di errore di MariaDB (numero). Non bisogna usare un valore SQLSTATE di '00000' o un codice errore 0, perché essi significano che non vi è alcun errore. Per una lista di SQLSTATE e codici di errore, si veda http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html.
  • Una condizione precedentemente dichiarata con DECLARE ... CONDITION. Si veda DECLARE CONDITION.
  • SQLWARNING è una abbreviazione che indica la classe di valori SQLSTATE che iniziano con '01'.
  • NOT FOUND è l'abbreviazione per la classe di valori SQLSTATE che iniziano con '02'. Si usa per controllare cosa accade quando un cursore raggiunge la fine di un set di risultati. Se non vi sono più record da leggere, si verifica una condizione No Data e si ottiene un valore SQLSTATE di 02000. Per rilevare questo evento si può dichiarare un handler o una condizione NOT FOUND. Un esempio è presente alla pagina http://dev.mysql.com/doc/refman/5.1/en/cursors.html. Questa condizione si verifica anche con un'istruzione SELECT ... INTO lista_variabili che non trova alcuna riga.
  • SQLEXCEPTION è una abbreviazione per la classe di errori SQLSTATE che non inizia con '00', né '01', né '02'.

Esempi

MariaDB [test]> CREATE TABLE test.t (s1 INT, PRIMARY KEY (s1));
Query OK, 0 rows affected (0.11 sec)

MariaDB [test]> delimiter //
MariaDB [test]> 
MariaDB [test]> 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)

MariaDB [test]> CALL handlerdemo()//
Query OK, 0 rows affected (0.00 sec)

MariaDB [test]> SELECT @x//
+------+
| @x   |
+------+
|    3 |
+------+
1 row in set (0.00 sec)

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.