Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1188 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  problème TRIGGER

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème TRIGGER

n°2269257
darknight7​77
Posté le 07-11-2015 à 18:17:27  profilanswer
 

Bonsoir à vous,  
J'ai essayé de créer un trigger qui puisse à chaque insertion d'une ligne de commande mettre à jour automatiquement le montant
total de la commande correspondante ainsi que le stock du produit concerné par la ligne de commande.
Cette maj ne doit pas se faire si la quantité demandée dans la ligne de commande est strictement
supérieure à la quantité actuellement en stock. Dans ce cas, l'erreur doit être inscrite dans la table ligne_erreur...
 
Le problème c'est que mon trigger ne fonctionne pas et je ne comprends pas pourquoi :(
 
 
le code :
 
DROP TABLE produit cascade constraints;
DROP TABLE commande cascade constraints;
DROP TABLE ligne_commande cascade constraints;
DROP TABLE ligne_erreur cascade constraints;
 
 
-- on crée les tables
CREATE TABLE produit
-- Création de table
(idproduit varchar2(5),
desprod varchar(50),
prixprod number(8,2),
stockprod number(4),
constraint pk_produit primary key(idproduit)
);
 
CREATE TABLE commande
-- Création de table
(idcommande varchar2(5),
datecde date,
montanttotalcom number(10,2),
constraint pk_commande primary key(idcommande)
);
 
CREATE TABLE ligne_commande
-- Création de table
(idlig varchar2(5),
idcommande varchar2(5),
quantiteprod number(3),
idproduit varchar2(5) REFERENCES produit(idproduit),
constraint pk_ligne_commande primary key (idlig,idcommande)
);
 
CREATE TABLE ligne_erreur
-- Création de table
(
idcommande varchar2(5),
idlig varchar2(5),
idproduit varchar2(5),
quantiteprod number(3),
stockprod number(4)
);
 
 
ALTER TABLE ligne_commande add constraint fk_lig_com1 foreign key(idcommande)
REFERENCES commande(idcommande);
 
 
CREATE OR REPLACE TRIGGER before_update_commande
 BEFORE INSERT ON ligne_commande FOR EACH ROW
 DECLARE  
 
 PRAGMA AUTONOMOUS_TRANSACTION;
 prixprodcommande produit.prixprod%type;
 prixprodcommande := SELECT prixprod INTO produit WHERE idproduit = :NEW.idproduit;
 stockprodcommande produit.stockprod%type;
 stockprodcommande := SELECT stockprod INTO produit WHERE idproduit = :NEW.idproduit;
 
BEGIN
 
 IF ( stockprodcommande > :NEW.quantiteprod) THEN
  UPDATE produit SET stockprod = stockprod - :NEW.quantiteprod
  WHERE idproduit = :NEW.idproduit;
  UPDATE commande SET montanttotalcom = montanttotalcom + :NEW.quantiteprod * prixprodcommande
  WHERE idcommande = :NEW.idcommande;
 ELSE
  INSERT INTO ligne_erreur VALUES (:NEW.idcommande,:NEW.idlig,:NEW.idproduit,:NEW.quantiteprod,stockprodcommande);
  raise_application_error('-20001,La quantite demande est superieur au stock disponible');
 END IF
 
EXCEPTION
 
 
 
WHEN OTHERS THEN  
NULL;
END;
/

 

mood
Publicité
Posté le 07-11-2015 à 18:17:27  profilanswer
 

n°2269368
TotalRecal​l
Posté le 09-11-2015 à 14:42:07  profilanswer
 

Pense à préciser le SGBDR. Même si ça sent le Oracle vu la syntaxe ça ne peut pas faire de mal.
Précise aussi la version.
Et clarifie "mon trigger ne fonctionne pas" au cas où la cause ne serait pas évidente pour celui qui lira ton code :sarcastic:


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  problème TRIGGER

 

Sujets relatifs
problème trigger SQL SERVER 2005[Oracle] Problème trigger auto increment
[SQL Server] Probleme Trigger et PhpProblème pour la création d'un trigger dans MySQL
[oracle/pl/sql] problème trigger[Oracle - PL/SQL] Problème de trigger et de table inaccessible
Probléme d'un TriggerProbléme d'un Trigger
Probléme d'un TriggerProbléme d'un Trigger
Plus de sujets relatifs à : problème TRIGGER


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR