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 : "When" avec 2 tables ?


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 36
    Par défaut Trigger : "When" avec 2 tables ?
    Bonjour,

    Je suis assez débutants dans la création de triggers.
    Voici mon problème.
    Je voudrais créer un trigger AFERT INSERT
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER mon_trigger
    AFTER INSERT ON tableA
    FOR EACH ROW
    WHEN (NEW.TableA.id1 = NEW.TableB.id1 and NEW.TableB.col1 = 4)
    BEGIN
    	  insert into .....;
    end;
    A la création j'ai l'erreur
    ORA-00904: NEW.TableB.col1 : invalid identifier

    Je veux que mon insert soit exécuté seulement si le contenu de WHEN est vrai.
    Je suis sur Oracle 9.2.0.5, Windows.

    svp, aidez moi...

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    un trigger est attaché à une et une seule table alors évidemment dans le WHEN tu ne peux pas mettre une deuxième table... tu veux faire quoi exactement ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 36
    Par défaut
    Je veux que lorsque que mon trigger se déclenche sur INSERT sur TableA, il fasse l'insert du begin que si (NEW.TableA.id1 = NEW.TableB.id1 and NEW.TableB.col1 = 4)

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Non mais attend... tu inseres dans tableA... comment pourrai-tu avec une nouvelle valeur dans tableB et tableC... c'est pas de la magie Oracle

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 36
    Par défaut
    C'est nul Oracle !

    C'est justement ce pourquoi je post mon problème.
    Insérer dans une table C suivant l'insertion dans une table A et en incluant une clause entre la table A et une table B pour valider cette insertion dans la table C ne me paraissait pas forcément compliqué... ou illogique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER mon_trigger
    AFTER INSERT ON tableA
    FOR EACH ROW
    WHEN (NEW.TableA.id1 = NEW.TableB.id1 and NEW.TableB.col1 = 4)
    BEGIN
    	  insert into tableC;
    end;
    Alors peut-être que les NEW sont de trop.
    Je peu peut-être utilisé un curseur ?

  6. #6
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    le WHEN est de trop surtout

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

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