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 :

[TRIGGER] - Suppression d'un enregistrement à partir d'un enregistrement supprimé d'une autre table.


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut [TRIGGER] - Suppression d'un enregistrement à partir d'un enregistrement supprimé d'une autre table.
    Bonjour à tous,

    Je cherche à un trigger qui supprimerai un enregistrement d'une table B, lorsque un enregistrement d'une table A se fait. J'ai réussi à faire le trigger d'insertion lors de la création d'un enregistrement, mais pour l'inverse je dois dire que je bloque.


    Pour l'insertion j'ai, pour un enregistrement créé dans la table TABLE_A un enregistrmeent qui s'insère dans la table TABLE_B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE OR REPLACE TRIGGER SCHEMA.TRG_CREATE
    BEFORE INSERT ON SCHEMA.TABLE_A FOR EACH ROW
    BEGIN
    INSERT INTO SCHEMA.TABLE_B(ID,TEXTE) values (:new.ID,:new.TEXTE);
    END;
    /
    A priori, ce trigger fonctionne.

    Le problème se pose pour la suppression. Le champ commun entre les deux tables est ID.
    Le trigger devrait à la suppression d'un enregistrement de ma table TABLE_A, supprimer un enregistrement de ma table TABLE_B.

    J'ai essayé à taton ce trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE TRIGGER SCHEMA.TRG_DEL
    BEFORE DELETE ON SCHEMA.TABLE_A FOR EACH ROW
    BEGIN
    DELETE  from SCHEMA.TABLE_B where TABLE_A.ID=TABLE_B.ID;
    END;
    /
    Merci pour votre aide.

  2. #2
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE  from SCHEMA.TABLE_B where TABLE_A.ID=TABLE_B.ID;
    C'est quoi TABLE_B.ID ? Pourquoi lors de l'insertion vous n'avez pas écrit pareil ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    La table TABLE_B c'est celle sur laquelle je voudrais supprimer l'enregistrement. Lors de l'insertion j'ai bien écris que j'alimentais ma table TABLE_B.

    Dans le trigger d'insertion, j'alimente ma table TABLE_B lorsque j'ai un nouvel enregistrement dans la table TABLE_A.

    Je voudrais faire pareil avec la suppression d'un enregistrement de ma table TABLE_A pour que cela supprime l'enregistrement de la table TABLE_B. Le champ commun étant le champ ID.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    mnitu vous amenait à réfléchir sur l'utilisation de :new.id (en l'occurrence :old.id) plutôt que tableA.id, comme vous avez fait dans le premier déclencheur.
    De fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE TRIGGER SCHEMA.TRG_DEL
    BEFORE DELETE ON SCHEMA.TABLE_A FOR EACH ROW
    BEGIN
        DELETE from SCHEMA.TABLE_B where ID = :old.ID;
    END;
    /

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/08/2014, 11h02
  2. Réponses: 0
    Dernier message: 16/04/2010, 18h45
  3. Réponses: 11
    Dernier message: 18/01/2010, 11h29
  4. Réponses: 2
    Dernier message: 29/10/2008, 15h31
  5. Réponses: 6
    Dernier message: 09/01/2008, 11h56

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