Erreur SQL 1442 : Trigger Insert ne fonctionne pas
Bonjour,
je réalise un trigger qui vérifie si la date de la séance (date_session) est 3 mois supérieur à la date de formation (Date_form) lors de l'insertion.
Malheureusement lorsque je réalise les tests d'insertion je reçois comme erreur:
" #1442 - Can't update table 'session' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. "
Après de nombreuses recherches, je reste coincé. j'espère donc que vous pourriez m'aider.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
delimiter //
CREATE TRIGGER chk_date_session
BEFORE INSERT
ON session FOR EACH ROW
BEGIN
IF (select Date_form from formation, session
where formation.num_formation = session.num_formation
and DATE_ADD(Date_form, INTERVAL 3 MONTH) > NEW.date_session)
THEN
delete from session where num_session = new.num_session;
END IF;
END
delimiter ; |
Non inhibition d'une opération via trigger
Citation:
Envoyé par
Nekfeu
Bonjour,
je réalise un trigger qui vérifie si la date de la séance (date_session) est 3 mois supérieur à la date de formation (Date_form) lors de l'insertion.
Malheureusement lorsque je réalise les tests d'insertion je reçois comme erreur:
" #1442 - Can't update table 'session' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. "
Après de nombreuses recherches, je reste coincé. j'espère donc que vous pourriez m'aider.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
delimiter //
CREATE TRIGGER chk_date_session
BEFORE INSERT
ON session FOR EACH ROW
BEGIN
IF (select Date_form from formation, session
where formation.num_formation = session.num_formation
and DATE_ADD(Date_form, INTERVAL 3 MONTH) > NEW.date_session)
THEN
delete from session where num_session = new.num_session;
END IF;
END
delimiter ; |
Bonjour Nekfeu,
On ne peut ignorer une opération en cours via un trigger.
La seule façon d'inhiber l'opération (via un trigger) est de provoquer une erreur lors de l'insertion.
2 méthodes :
- facile : simpl(ist)e et inélégante, elle ne peut s'appliquer que si la clé primaire de la table en insertion n'a pas l'attribut auto-incrément : -> SET NEW.[PrimaryKey] = NULL; /* sur le Before insert */
- un peu plus complexe : générer une exception dans le trigger qui provoquera l'erreur via une instruction SIGNAL