Probleme avec mon trigger sous oracle 10g

Résolu/Fermé
yaobo84 Messages postés 91 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 1 novembre 2012 - 12 nov. 2011 à 01:18
linux31 Messages postés 61 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 7 décembre 2011 - 7 déc. 2011 à 16:43
Bonjour,

voici mes table:
Ligne_Coms (Num_Com ,Num_Pro ,Qte_Com );
Commandes (Num_Com ,Date_Com,Nbre_lc),Mtot_Com,Num_Cli)
Produits ( Num_Pro,Lib_Pro),Prix_U,Qtestock,Seuil_Reapro)

Mon trigger est sensé incrementer nbre_lc,recalculer mtot_com et soustraire qtestock pour chaque ajout d'une nouvelle ligne si la fonction verifier_qtecom(Qte_Com,Num_Pro)==true sinon l'opération d'ajout est annulée.

Voic ce que j'ai essayé:
CREATE TRIGGER ajoutCommande
AFTER INSERT
ON Ligne_Coms
FOR EACH ROW
Vl_Prix_U  Produits.Prix_U%TYPE;
BEGIN
   IF (verifier_qtecom(:NEW.Qte_Com,:NEW.Num_Pro)) then
	UPDATE Produits
		SET qtestock = qtestock - :new.Qte_Com
		WHERE Num_Pro = :new.Num_Pro
		RETURNING Prix_U INTO Vl_Prix_U;
 
	UPDATE Commandes 
		SET nbre_lc= nbre_lc+1,
		    Mtot_Com = Mtot_Com + :new.Qte_Com * Vl_Prix_U
		WHERE Ligne_Coms.Num_Com=Commandes.Num_Com ;
 
   ELSE 
	RAISE_APPLICATION_ERROR (-20001, 'Ajout annulé') ;
   END IF;
END;

L'execution de ce trigger me donne cette erreur:
4/3 	PL/SQL: SQL Statement ignored
5/92 	PL/SQL: ORA-00904: "LIGNE_COMS"."NUM_COM" : identificateur non va lide
7/3 	PL/SQL: SQL Statement ignored
8/30 	PL/SQL: ORA-00904: "QTE_COM" : identificateur non valide

Quelqu'un peut m'aider?

6 réponses

linux31 Messages postés 61 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 7 décembre 2011 11
7 déc. 2011 à 16:43
Pourrais tu poster la solution? que tous le monde puisse en tirer bénéfice
1
jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 9 225
12 nov. 2011 à 18:24
Salut,

Au moins il faut :

WHERE :new.Ligne_Coms.Num_Com=Commandes.Num_Com ;

que pour la compréhension j'ecrirai :

WHERE Commandes.Num_Com = :new.Ligne_Coms.Num_Com ;

0
yaobo84 Messages postés 91 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 1 novembre 2012 1
12 nov. 2011 à 19:29
L'execution du code sous oracle me ressort ceci;
Vl_Prix_U  Produits.Prix_U%TYPE;
*

ERREUR à la ligne 5 :
ORA-04079: spécification de déclencheur erronée


Tandisque show err trigger ajoutcommande me dit qu'il n'ya pa d'erreurs.
0
jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 9 225
12 nov. 2011 à 19:34
Parce qu'il faut avant un titre de paragraphe :

DECLARE
Vl_Prix_U Produits.Prix_U%TYPE;
BEGIN
...

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
voici l code:
CREATE OR REPLACE TRIGGER ajoutCommande
AFTER INSERT
ON Ligne_Coms
FOR EACH ROW
DECLARE
Vl_Prix_U  Produits.Prix_U%TYPE;
BEGIN
   IF (verifier_qtecom(:NEW.Qte_Com,:NEW.Num_Pro)) then
	UPDATE Produits
		SET qtestock = qtestock - :new.Qte_Com
		WHERE Num_Pro = :new.Num_Pro
		RETURNING Prix_U INTO Vl_Prix_U;
 
	UPDATE Commandes 
		SET nbre_lc= nbre_lc+1,
		    Mtot_Com = Mtot_Com + :new.Qte_Com * Vl_Prix_U
		WHERE :new.Ligne_Coms.Num_Com=Commandes.Num_Com ;
 
   ELSE 
	RAISE_APPLICATION_ERROR (-20001, 'Ajout annulé') ;
   END IF;
END;

 

voici le message après execution:
Avertissement : Déclencheur créé avec erreurs de compilation.

show err trigger ajoutcommande me donne ceci:
13/9 	PLS-00049: variable de lien erronée 'NEW.LIGNE_COMS' 
0
jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 9 225
14 nov. 2011 à 10:03
bah faut essayer :new.Num_Com à la place de :new.Ligne_Coms.Num_Com
0
meci probleme resolu!!!!!
0