IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Problème trigger stock


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Par défaut Problème trigger stock
    Bonjour,

    Débutant en SQL, je viens à vous car je rencontre un problème sur ma base, sous oracle. Je souhaite créer un trigger qui actualise le stock de mes produits lorsque ceux-ci sont insérés dans une commande

    Je m'explique voici deux de mes tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create table Produits (
        Numproduit number not null constraint produits_pk primary key,
        Nomproduit varchar2(30) not null,
        Categorie varchar2(15) not null,
        Prix_unit number not null,
        Quantite number
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create table Detailcommandes (
        Numcommande number not null,
        Numproduit number not null,
        Quantite number,
        primary key(Numcommande,Numproduit),
        foreign key(Numcommande) references Commandes(Numcommande),
        foreign key(Numproduit) references Produits(Numproduit)
    );
    Le trigger que j'utilise est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE TRIGGER gestion_quantite after INSERT ON Detailcommandes
    FOR EACH ROW
    UPDATE produits
    SET Quantite =Quantite - :new.Quantite 
    WHERE numproduit = :new.Numproduit
    Lorsque je tente par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into Detailcommandes values(10,20001,1);
    j'ai cette erreur:

    ORA-00001: unique constraint (SQL_FQHBDQYTRHTVCQOFBCMNKZKHK.SYS_C009793450) violated ORA-06512: at "SYS.DBMS_SQL", line 1721

    J'ai tenté beaucoup de choses issues de nombreux forums je ne vois pas où ça coince

    Merci beaucoup !

  2. #2
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Bonjour,
    la commande 10 existe t'elle dans la table commandes ?
    le produit 20001 existe t'il dans la table produits ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Par défaut
    Bonjour,

    Oui ils existent !

  4. #4
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Basiquement et sensiblement différent
    ceci ne passe pas non plus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into Detailcommandes (Numcommande,Numproduit , Quantite) values (10,20001,1);

  5. #5
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Je vais être désagréable mais quand je lis :
    "j'ai cette erreur: ORA-00001: unique constraint (SQL_FQHBDQYTRHTVCQOFBCMNKZKHK.SYS_C009793450) violated ORA-06512: at "SYS.DBMS_SQL", line 1721
    J'ai tenté beaucoup de choses issues de nombreux forums je ne vois pas où ça coince"
    je me demande ce que tu n'as pas compris...

    ORA-00001: contrainte unique violée, tu essayes d'insérer deux fois la même donnée dans une colonne PK ou Unique; dans la table Detailcommandes certainement.

    Au fait, la contrainte SQL_FQHBDQYTRHTVCQOFBCMNKZKHK.SYS_C009793450 pointe vers quelle table et quelle colonne?
    Si c'est difficile à trouver, un conseil, la prochaine fois que tu déclares des contraintes d'intégrité, c'est mieux de leur donner un nom.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Pour compléter :

    Comment nommer les Contraintes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE Detailcommandes (
        Numcommande number NOT NULL,
        Numproduit number NOT NULL,
        Quantite number,
        CONSTRAINT Detailcommandes_PK PRIMARY KEY(Numcommande,Numproduit),
        CONSTRAINT Detailcommandes_FK_Commandes FOREIGN KEY(Numcommande) REFERENCES Commandes(Numcommande),
        CONSTRAINT Detailcommandes_FK_Produits FOREIGN KEY(Numproduit) REFERENCES Produits(Numproduit)
    );
    Attention à ton trigger, ta colonne Quantité peut être NULL suivant la définition, donc si tu crées une commande avec quantite NULL, tu updates Produit et il y aura NULL dans Produit.Quantite .. en gros tu perds ton info de stock
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE TRIGGER gestion_quantite after INSERT ON Detailcommandes
    FOR EACH ROW
    UPDATE produits
    SET Quantite = NVL(Quantite,0) - NVL(:new.Quantite,0)
    WHERE numproduit = :new.Numproduit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/09/2006, 14h38
  2. Problème Trigger SQL Server
    Par RodEpsi dans le forum Développement
    Réponses: 6
    Dernier message: 25/05/2006, 15h03
  3. problème procédure stockée
    Par hamham dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 19/04/2006, 12h33
  4. Problème procédure stockée + trie
    Par an_merle dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 14/02/2006, 22h58
  5. problème trigger
    Par zeurkk dans le forum Oracle
    Réponses: 2
    Dernier message: 20/12/2005, 18h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo