Se connecter / S'enregistrer
Votre question

Trigger

Tags :
  • Script
  • Programmation
Dernière réponse : dans Programmation
12 Avril 2011 02:11:39

Bonjour,
j'ai un pbm avec mon script oracle . en effet , je souhaite créer un trigger qui permet après l'ajout d'un ligne de supprimer la ligne ajouter lorsque places_disponible< places_resrve ,voici cmt je crée mon trigger :

  1. CREATE OR REPLACE TRIGGER nombre_des_places_disponible
  2. After INSERT on reservation
  3. For each row
  4. DECLARE
  5. places_disponible trajet.NbPlaces%Type ;
  6. places_resrve reservation.NBPlacesRes%Type ;
  7. BEGIN
  8. Select Id_Trajet, SUM(NbPlaces) into places_disponible
  9. From trajet
  10. Group by Id_Trajet Having Id_Trajet=:new.Id_Trajet;
  11. Select Id_Trajet, SUM(NBPlacesRes) into places_resrve
  12. From reservation
  13. Group by Id_Trajet Having Id_Trajet=:new.Id_Trajet;
  14. If (places_disponible< places_resrve)then
  15. Delete from reservation where Id_Resa=:new.Id_Resa;
  16. End if;
  17. End ;
  18. /

et ca me donne cette erreur "déclencheur crée avec erreur de compilation" losque je veus inserer dan sla table ca me di q'il ne peut pa inserer parce qu'il y a une erreur sur le trigger.
merci pour votre aide

Autres pages sur : trigger

12 Avril 2011 13:01:37

Salut Ben,

Bah oui.
Tu aurais dû commencer par afficher les erreurs de compilation de ton trigger (par "show errors" sous sqlplus).

Tu problème est simple, mais tu ne vas pas être content :

Oracle interdit qu'un trigger posé sur une table modifie cette même table (ici reservation).
Voilà, il faut trouver une autre solution (vérifier avant l'insertion, par exemple).

m
0
l
12 Avril 2011 19:54:50

voila la message que j'ai reçu :
SQL> show errors;
Erreurs pour TRIGGER NOMBRE_DES_PLACES_DISPONIBLE :

LINE/COL ERROR
-------- -------------------------------------------------------
5/1 PL/SQL: SQL Statement ignored
5/57 PL/SQL: ORA-00947: nombre de valeurs insuffisant
8/1 PL/SQL: SQL Statement ignored
8/56 PL/SQL: ORA-00947: nombre de valeurs insuffisant
m
0
l
15 Avril 2011 13:49:23

Oui, dans ton ordre
Select Id_Trajet, SUM(NbPlaces) into places_disponible
tu as deux valeurs sélectionnées, que tu tentes de récupérer dans une seule variable.

Mais je te le répète, même en corrigeant cette erreur, que le trigger devienne valide à la compilation, il ne marchera pas à l'exécution, car tu tentes de modifier la table sur laquelle le trigger est posé.

Tu ne peux pas gérer la suppression par l'application qui lance l'insert ?
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS