venerdì 22 luglio 2011

Problema trigger su MySql

Dovendo definire un trigger su mysql contenente un costrutto BEGIN...END si incontra il problema del carattere ";" che non consente di definire correttamente l'intero corpo del trigger.

Se questo è il mio trigger:

CREATE TRIGGER prova
BEFORE INSERT ON account
FOR EACH ROW
BEGIN
IF NEW.ruolo = `admin` THEN
SET NEW.maxTime = 600;
END IF;
END;

Volendolo caricare da riga di comando devo impostare un delimiter differente dal punto e virgola in modo che quest'ultimo non vada in errore, quindi:

mysql> delimiter //
mysql> CREATE TRIGGER pippo
    -> BEFORE INSERT ON prova
    -> FOR EACH ROW
    -> BEGIN
    -> IF NEW.ruolo = `admin` THEN
    -> SET NEW.pippo = 1000;
    -> END IF;
    -> END;//
Query OK, 0 rows affected (0.10 sec)

Si noti la presenza del "//" alla fine dell'ultimo END.
A questo punto occorre anche re-impostare il delimiter originale:

delimiter ;

Nessun commento:

Posta un commento