Le trigger et l'insertion sont liés dans mécanisme sous-transactionnel, càd que si l'insertion échoue, l'effet du trigger sera automatiquement annulé, et vice-versa. Cette opération atomique trigger + insertion peut faire elle-même partie d'une transaction plus large, qui n'est pas en soit affectée par ce qui se passe dans l'insertion. Du coup, ROLLBACK et COMMIT sont interdits dans les triggers.
Si tu veux interdire l'insertion, l'astuce est de faire commettre une erreur à ton trigger, par exemple en insérant un NULL dans une clé :
IF nb = 0 THEN INSERT INTO prendre (IDprendre) VALUES (NULL) ;
Pour plus de détails sur cette technique, je t'invite à lire l'article de kazou :
http://alain-defrance.developpez.com...integre-error/
Dans ton cas précis, il me semble que tu n'as pas besoin de trigger. Tu devrais pouvoir faire ton insertion sur ce modèle :
1 2 3 4
| INSERT INTO prendre (IDpers, IDrepas)
SELECT IDPERS, IDREPAS
FROM reserver
WHERE IDPERS = param_IDPERS AND IDREPAS = param_IDREPAS |
Si la combinaison IDPERS / IDREPAS n'existe pas dans reserver, il n'y a aucune ligne à insérer.
Partager