Discussione:
[mysql] trigger su insert , come scrivere la condizione di zero row inserite ?
(troppo vecchio per rispondere)
Giulia
2014-02-14 15:35:39 UTC
Permalink
Ho questo trigger

DELIMITER $$
CREATE TRIGGER trig_insert_iolog_last AFTER INSERT ON iolog FOR EACH ROW
BEGIN
delete from iolog_last ;
insert into iolog_last select * from view_last_iolog;
END$$
DELIMITER ;

Vorrei eseguire il pezzo tra begin/end dopo che siano state inserite un numero N di rows N > 0 e
non ogni volta che chiamo semplicemente la insert (essendo la insert derivata da una select viene eseguita anche con 0 = rows).

Giulia
enoquick
2014-02-14 16:12:15 UTC
Permalink
Post by Giulia
Ho questo trigger
DELIMITER $$
CREATE TRIGGER trig_insert_iolog_last AFTER INSERT ON iolog FOR EACH ROW
BEGIN
delete from iolog_last ;
insert into iolog_last select * from view_last_iolog;
END$$
DELIMITER ;
Vorrei eseguire il pezzo tra begin/end dopo che siano state inserite un
numero N di rows N > 0 e
non ogni volta che chiamo semplicemente la insert (essendo la insert
derivata da una select viene eseguita anche con 0 = rows).
Giulia
il trigger viene eseguito per ogni insert, su questo non c'è niente da fare

l' unica cosa è registrarsi da qualche parte il numero degli inserimenti
e poi se superano un determinato eseguire le istruzioni che servono

qui la sintassi della create trigger:
https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html
Giulia
2014-02-14 20:44:54 UTC
Permalink
Post by enoquick
il trigger viene eseguito per ogni insert, su questo non c'è niente da fare
Non riesco a capire se con una IF NEW posso eliminare il caso della insert con zero rows ,
per capirci :

insert into tab1 (select * from tab2 where false);

non deve eseguire le parti tra il begin/end
adesso sono sicura che le esegue.


Giulia
Giulia
2014-02-20 12:58:48 UTC
Permalink
Post by Giulia
Post by enoquick
il trigger viene eseguito per ogni insert, su questo non c'è niente da fare
Non riesco a capire se con una IF NEW posso eliminare il caso della insert con zero rows ,
insert into tab1 (select * from tab2 where false);
non deve eseguire le parti tra il begin/end
adesso sono sicura che le esegue.
Mi autorispondo , basta che testo qualunque campo della NEW.nomecampo con
la sintassi (IS NOT NULL).

Giulia
enoquick
2014-02-20 15:06:08 UTC
Permalink
Post by Giulia
Post by Giulia
Post by enoquick
il trigger viene eseguito per ogni insert, su questo non c'è niente da fare
Non riesco a capire se con una IF NEW posso eliminare il caso della
insert con zero rows ,
insert into tab1 (select * from tab2 where false);
non deve eseguire le parti tra il begin/end
adesso sono sicura che le esegue.
Mi autorispondo , basta che testo qualunque campo della NEW.nomecampo con
la sintassi (IS NOT NULL).
Giulia
E' una soluzione
Comunque non mi sembra un comportamento corretto di MySql (non è tra i
db che uso)
Giulia
2014-02-21 12:20:34 UTC
Permalink
Post by enoquick
E' una soluzione
Comunque non mi sembra un comportamento corretto di MySql (non è tra i db che uso)
Sembrerebbe che il trigger venga invocato qualunque sia il risultato della where, non so se sia utile in casi particolarissimi,
comunque ho rivisto tutta l'applicazione e sono riuscita ad evitare la insert from select e quindi anche la condizione zero rows.

Giulia

Loading...