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 - Mettre à jour un champ en fonction d'un autre


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Points : 29
    Points
    29
    Par défaut Trigger - Mettre à jour un champ en fonction d'un autre
    Bonjour,

    je souhaiterai mettre à jour le champ1 de ma table table1 avec la valeur du champ2 de ma table1.
    Ceci pour tout nouvel enregistrement crée ou dès modification de mon champ2 .
    J'ai testé le code suivant mais il est malheureusement invalide et j'avoue avoir du mal à trouver la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER monTrigger
    	BEFORE INSERT OR UPDATE
    		ON table1
    		FOR EACH ROW 
    	BEGIN
    	:new.champ1 = :new.champ2;
    	END ;
    D'avance merci à ceux qui éclaireront ma lanterne.

  2. #2
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Il y faudrait deux table si je me trompe pas, une pour le trigger et l'autre pour la table que tu veux modifier, j'ai fait comme ça une fois (ça fait longtemeps)
    If you type Google into Google, you Can break the internet" - The IT Crowd

  3. #3
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par benharperr Voir le message
    Bonjour,

    je souhaiterai mettre à jour le champ1 de ma table table1 avec la valeur du champ2 de ma table1.
    Ceci pour tout nouvel enregistrement crée ou dès modification de mon champ2 .
    J'ai testé le code suivant mais il est malheureusement invalide et j'avoue avoir du mal à trouver la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER monTrigger
    	BEFORE INSERT OR UPDATE
    		ON table1
    		FOR EACH ROW 
    	BEGIN
    	:new.champ1 = :new.champ2;
    	END ;
    D'avance merci à ceux qui éclaireront ma lanterne.

    Bonjour,

    ca peut t'aider techniquement

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER trig_table_1
    	BEFORE INSERT OR UPDATE OF col2
    		TABLE1 		FOR EACH ROW
    BEGIN
    	:new.col1 :=:new.col2;
    	END ;
    /

    Fonctionnelement ...

    Ca veut dire que a chaque fois que tu inséres dans la table , champ1 sera toujours egale a champ2 ....

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  4. #4
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Essaie ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE TRIGGER monTrigger
        BEFORE INSERT OR UPDATE
            ON table1
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW 
    BEGIN
        :new.champ1 = :new.champ2;
    END ;
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  5. #5
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 224
    Points : 211
    Points
    211
    Par défaut
    Citation Envoyé par Garuda Voir le message
    Essaie ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE TRIGGER monTrigger
        BEFORE INSERT OR UPDATE
            ON table1
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW 
    BEGIN
        :new.champ1 = :new.champ2;
    END ;
    BOnjour,

    La clause REFERENCING citée ci-dessus est celle par défaut donc pas besoin de la remettre. Je suis plus d'accord avec fatsora sauf que je ferais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE TRIGGER trig_table_1
    	  BEFORE INSERT OR UPDATE OF col2
    	  ON TABLE1 		
              FOR EACH ROW
    BEGIN
    	:new.col1 = :new.col2;
    	END ;
    /
    Maintenant quelle est ton erreur ? De plus ce code ne fera rien du tout... il faut réaliser dans le bloc le code de mise à jour (UPDATE) mais dans ce cas tu auras peut-être un problème de table mutante.

  6. #6
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Bof finalement l'erreur est (presque) évidente !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE TRIGGER trig_table_1
          BEFORE INSERT OR UPDATE OF col2
          ON TABLE1         
              FOR EACH ROW
    BEGIN
        :new.col1 := :new.col2;
        END ;
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  7. #7
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 224
    Points : 211
    Points
    211
    Par défaut
    Oui je sais pas pourquoi j'ai retiré les deux points devant le égal ^^

    Toujorus est-il que son trigger ne fait rien comme cela...

    Derrière il faut mettre à jour ou modifier sa colonne...

Discussions similaires

  1. [AC-2010] Mettre à jour un champ en fonction d'un autre
    Par jouclar dans le forum IHM
    Réponses: 2
    Dernier message: 26/12/2012, 15h14
  2. [AC-2010] fonction pour mettre à jour un champ en majuscule
    Par bremmo76 dans le forum Access
    Réponses: 6
    Dernier message: 23/09/2010, 22h53
  3. Réponses: 4
    Dernier message: 08/05/2008, 20h25
  4. Mettre a jour un champ en fonction d'un autre
    Par Falcdyr dans le forum IHM
    Réponses: 2
    Dernier message: 14/04/2008, 14h29
  5. Réponses: 3
    Dernier message: 24/10/2007, 10h01

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