16 . Il linguaggio SQL Vers . 9.3 – Marzo 2024
31 ) creiamo un TRIGGER sulla tabella Articolo che controlli la clausola ù
CHECK ( Prezzo BETWEEN 1.00 AND 10.00 )
impostata in precedenza nella CREATE TABLE di Articolo , che MySQL non supporta , inizializzando per esempio a 0 il prezzo di un articolo inserito se esso è inferiore a 1.00 ed a 10.00 se esso è superiore a tale cifra
DELIMITER // CREATE TRIGGER trg1 BEFORE INSERT ON fornituranew . Articolo FOR EACH ROW BEGIN IF NEW . Prezzo < 1.00
THEN
SET NEW . Prezzo = 0 ; END IF ; IF NEW . Prezzo > 10.00
THEN
SET NEW . Prezzo = 10.00 ; END IF ; END // DELIMITER ;
N . B . I delimitatori differenti dallo standard ; vengono utilizzati nell ’ uso di funzioni , stored procedures , e triggers nelle quali occorre definire istruzioni multiple . E ’ possibile definire un proprio delimitatore alternativo ( nel nostro caso //) per segnalare la fine dell ’ intera procedura , permettendo nel contempo a ciascuno statement di essere correttamente terminato con il ; Quindi , quando il codice viene eseguito da un client mysql ( come la console ), il client è in grado di comprendere quando è giunto alla fine della sua definizione ed è in grado di eseguire l ’ intero set di istruzioni . Si osservi che il comando DELIMITER è un commando di un client mysql ( e di altri tipi di client dbms ) e non è uno standard del linguaggio SQL .
N . B . Il qualificatore NEW indica proprio che il nome di colonna che stiamo utilizzando si riferisce al nuovo valore della riga che sta per essere aggiornata . NEW si può utilizzare in caso di INSERT e UPDATE . Analogamente è disponibile il qualificatore OLD che fa riferimento ai valori precedenti la modifica , e si può utilizzare in caso di UPDATE e DELETE . La modifica attraverso l ’ istruzione SET è possibile solo per i valori NEW e solo nei trigger di tipo BEFORE .
N . B . Attualmente MySQL supporta un solo trigger attivo per ciascuna tabella
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 70