Domanda:
problemi trigger sql?
Kris_Aldebaran
2012-12-18 09:07:42 UTC
ho creato questo semplice trigger:

CREATE TRIGGER V_1
BEFORE INSERT ON concorrente
FOR EACH ROW
BEGIN
IF NEW.Is_gruppo= false
and (NEW.nome is not null or NEW.n_membri is not null ) then
DELETE NEW;
END IF;
END;

per controllare un semplice vincolo

easyphp mi spara fuori questo errore:

Messaggio di MySQL:

#1064 - Errore di sintassi nella query SQL vicino a '' linea 7

il bello è che se creo un trigger vuoto :

CREATE TRIGGER V_1
BEFORE INSERT ON concorrente
FOR EACH ROW
BEGIN

END

quindi senza istruzioni, senza delimitatore ecc... da tutto corretto!!!

non capisco dove sbaglio
Tre risposte:
?
2012-12-18 13:25:19 UTC
Controlla se cambia qualcosa cancellazione di "punto e virgola" dopo END IF, THEN e IS NOT NULL in maiuscola...



Altro modo:



CREATE FUNCTION public.V1_nome_del_tuo_vincolo () RETURNS TRIGGER AS $V1_nome_del_tuo_vincolo$

BEGIN

IF (NEW.nome IS NOT NULL AND NEW.n_membri IS NOT NULL)

THEN

RAISE EXCEPTION 'Violazione del mio vincolo';

END IF;

RETURN NEW;

END;



CREATE TRIGGER V1_nome_del_tuo_vincolo BEFORE INSERT ON concorrente

FOR EACH ROW EXECUTE PROCEDURE V1_nome_del_tuo_vincolo();
?
2012-12-19 15:15:38 UTC
Ciao!

Se hai bisogno di aiuto visita ed iscriviti su http://www.cplobby.it . Si tratta di un forum nato da poco riguardante l'informatica, la programmazione e l'elettronica in generale, lì sapranno aiutarti senza dubbio! Basta che ti iscrivi (ovviamente gratuitamente) e in 1 minuto puoi aprire la discussione con il tuo problema! Vedrai che te lo risolveranno subito! E poi puoi aiutare un forum emergente a crescere grazie anche al tuo contributo, magari diventando anche un membro dello staff! http://www.cplobby.it
BluNotte
2012-12-19 03:09:28 UTC
1064 - Errore di sintassi nella query SQL vicino a '' linea 7

La linea 7 è DELETE NEW;

infatti DELETE NEW; non è un'istruzione valida.



La sintassi di DELETE è un'altra e, peraltro, anche se la sintassi fosse corretta, l'istruzione fallirebbe, perché tenterebbe di eliminare qualcosa che ancora non è nella tabella (il trigger è BEFORE insert).

A seconda del dbms che stai usando, probabilmente, ci sono modi migliori per fare quello che stai tentando di fare.


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...