Pbm avec un trgger crée
Résolu
tfcv123
Messages postés
75
Statut
Membre
-
tfcv123 Messages postés 75 Statut Membre -
tfcv123 Messages postés 75 Statut Membre -
Bonjour,
voici mon trigger que je crée qui me permet lors de l'ajout d'une nvelle ligne dans la table ligne_coms vérifie que la quantité commandé
n'est pas supérieur à la quantité en stock et affiche un message'stock insuffsant'
create or replace trigger verifier_qte_com
before insert on ligne_coms
for each row
declare
qte integer;
stock integer;
erreur EXCEPTION;
begin
select qtestock into qte
from produits
where num_pro =:new.num_pro;
select qté_com into stock
from ligne_coms
where num_com =:new.num_com;
if stock >= qte then
RAISE erreur;
else
update produits
set qtestock =qtestock-stock;
end if;
EXCEPTION
WHEN erreur THEN
RAISE_application_error(-20002,'le stock est insuffisant');
end;
il cree le trigger mais lorsque je veux inserer dans ma table linge_coms il m'affiche ce message:
ERREUR à la ligne 1 :
ORA-04098: Déclencheur 'COURS1.VERIFIER_COMMANDE' non valide. Echec de la revalidation
insert into ligne_coms( Num_com,Num_pro, Qté_com) values('103','100','20');
l'erreur peut se trouver où aidez moi
voici mon trigger que je crée qui me permet lors de l'ajout d'une nvelle ligne dans la table ligne_coms vérifie que la quantité commandé
n'est pas supérieur à la quantité en stock et affiche un message'stock insuffsant'
create or replace trigger verifier_qte_com
before insert on ligne_coms
for each row
declare
qte integer;
stock integer;
erreur EXCEPTION;
begin
select qtestock into qte
from produits
where num_pro =:new.num_pro;
select qté_com into stock
from ligne_coms
where num_com =:new.num_com;
if stock >= qte then
RAISE erreur;
else
update produits
set qtestock =qtestock-stock;
end if;
EXCEPTION
WHEN erreur THEN
RAISE_application_error(-20002,'le stock est insuffisant');
end;
il cree le trigger mais lorsque je veux inserer dans ma table linge_coms il m'affiche ce message:
ERREUR à la ligne 1 :
ORA-04098: Déclencheur 'COURS1.VERIFIER_COMMANDE' non valide. Echec de la revalidation
insert into ligne_coms( Num_com,Num_pro, Qté_com) values('103','100','20');
l'erreur peut se trouver où aidez moi
A voir également:
- Pbm avec un trgger crée
- Cree un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Comment cree un compte gmail - Guide
- Créer un lien pour partager des photos - Guide
- Comment créé un compte paypal - Guide
2 réponses
l'erreur se trouve surtout dans le design. les trigger sont une chose bien particulière. une trigger est exécute à chaque fois que tu insers (dans ton cas) des données. en principe ce n'est pas une bonne idée d'en utiliser. je comprends que dans ton cas cela se propose tout seul. il faut veiller à ne pas accepter des commandes des choses qui ne sont pas en stock.
pourtant cela n'arrive pas souvent (j'espère au moins pour ta société) mais la plupart du temps le choses sont en stock (encore, je l'espère).
il serait peut-être mieux d'exécuter une stored proc qui vérifie si le produit est disponible.
en règle général les triggers sont à éviter. seulement si on a plus une autre option. bon, cette règle est pour la performance. si cela ne joue pas de rôle...
pourtant cela n'arrive pas souvent (j'espère au moins pour ta société) mais la plupart du temps le choses sont en stock (encore, je l'espère).
il serait peut-être mieux d'exécuter une stored proc qui vérifie si le produit est disponible.
en règle général les triggers sont à éviter. seulement si on a plus une autre option. bon, cette règle est pour la performance. si cela ne joue pas de rôle...