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 :

Exercice sur trigger


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Par défaut Exercice sur trigger
    * Bonjour, *

    dans un exercice sur les trigger , la question était la suivante :


    Ecrire un trigger permettant de gérer automatiquement la quantité en stock des produits par rapport aux commandes.
    la BD de l'exercice est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CLIENT(numcl, nomcl,adr,tel) ;
    ARTICLE(numart,des_art,pu,qte_stock)
    COMMANDE(nc,numcl,datecde)
    LIGNE_COMMANDE(nc,numart,qtecom)
    je vous propose ma solution personnelle à cette question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    CREATE OR REPLACE TRIGGER Tlc2
    AFTER DELETE OR INSERT OR UPDATE OF QTE 
    ON LIGNE_COMMANDE
    FOR EACH ROW 
    BEGIN
     
        IF DELETING THEN
            UPDATE ARTICLE SET
     QTE_STOCK = QTE_STOCK - :OLD.QTE
            WHERE NUM_ART = :OLD. NUM_ART;
        END IF;
     
        IF INSERTING THEN
            UPDATE ARTICLE SET QTE_STOCK = QTE_STOCK + :NEW.QTE
            WHERE NUM_ART = :NEW. NUM_ART;
        END IF;
     
        IF UPDATING THEN
            IF :OLD.QTE>:NEW.QTE THEN
            UPDATE ARTICLE SET QTE_STOCK = QTE_STOCK + (:OLD.QTE-:NEW.QTE)
            WHERE NUM_ART = :OLD. NUM_ART;
        END IF;
     
        IF :OLD.QTE<:NEW.QTE THEN
            UPDATE ARTICLE SET QTE_STOCK = QTE_STOCK - (:NEW.QTE-:OLD.QTE)
            WHERE NUM_ART = :OLD. NUM_ART;
       END IF;
    END IF;
     
    END;
    je veux savoir si ma solution est correcte.
    merci pour votre aide.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Techniquement il n'y pas de colonne QTE dans la table Ligne_Commande à priori elle s’appelle qtecom. L'espace existante entre :NEW./:OLD. et Num_art est une erreur de syntaxe.
    Voici un exemple classique qui date un peu On Rollups, Merges, and Moves

Discussions similaires

  1. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 14h23
  2. PL/SQL problème sur Trigger
    Par kitsune dans le forum PL/SQL
    Réponses: 4
    Dernier message: 06/12/2005, 20h35
  3. Réponses: 4
    Dernier message: 28/07/2005, 16h22
  4. besoin d'aide sur trigger
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 18/07/2004, 22h28
  5. question general sur triggers (liaison avec VB)
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 15h57

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