Error handling nelle stored procedures in MySQL

13 maggio 2008

Le stored procedures mettono a disposizione alcune modalità per la gestione delle eccezioni che ci permettono di tenere traccia e ricevere notifiche sui malfunzionamenti intercorsi durante l’utilizzo di MySQL e l’invio di istruzioni ed interrogazioni al DBMS.

Nelle pagine seguenti vedremo come sia possibile sfruttare l’error handling di MySQL per ricavare informazioni preziose sulle cause che portano alla generazioni di errori durante l’esecuzione di comandi e istruzioni contenuti in funzioni e procedure.

Utilizzare i log per gestire gli errori

Per questa particolare modalità di error handling prenderemo in esame un particolare tipo di eccezione, cioè un errore durante un tentativo di inserimento:

mysql> CREATE TABLE tbl1 
Id INT, PRIMARY KEY (Id)) 
engine=innodb;//
mysql> CREATE TABLE tbl2 (Id INT, KEY (Id), 
FOREIGN KEY (Id) REFERENCES tbl1 (Id)) 
engine=innodb;// 
mysql> INSERT INTO tbl2 VALUES (9);//

L’esito del nostro comando INSERT sarà un errore. Abbiamo infatti creato una tabella destinata ad ospitare una chiave primaria e un’altra contenente una FOREIGN KEY entrambe sotto engine InnoDB; nel momento in cui provassimo ad inserire un valore per popolare la FOREIGN KEY questa istruzione provocherebbe un errore:

ERROR 1216 (23000): Cannot add or update a child row: a foreign key constraint fails

La notifica contiene il numero di errore, 1216, che ne specifica la tipologia; abbiamo quindi un’informazione utile ad individuare una particolare eccezione e a classificarla. Possiamo quindi basarci sugli output prodotti dal DBMS per creare una tabella/log in cui registrare le differenti tipologie di errore:

mysql> CREATE TABLE errori (messaggio VARCHAR(255))//

A questo punto avremo bisogno di realizzare una stored procedure in grado di popolare la nostra tabella per il log:

CREATE PROCEDURE proc (p1 INT) 
BEGIN 
 DECLARE EXIT HANDLER FOR 1216 
 INSERT INTO errori VALUES 
  (CONCAT('Time: ',current_date, 
  '. Foreign Key Reference Failure For 
  Value = ',p1)); 
 INSERT INTO tbl2 VALUES (p1); 
END;//

Con questo semplice codice abbiamo innanzitutto dato un nome alla nostra procedura (“proc”) a cui viene passato come parametro un dato di tipo intero; in secondo luogo abbiamo inizializzato il blocco BEGIN .. END all’interno del quale sono presenti le istruzioni previste nel caso in cui la stored procedure venga richiamata.

Se vuoi aggiornamenti su Error handling nelle stored procedures in MySQL inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Error handling nelle stored procedures in MySQL

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy