{Oracle}

Bonsoir à tous,

Je lutte désespérement avec mon 1er trigger. J'aurais besoin de la syntaxe exacte pour faire:

Sur update du champ Statut de la Table A alors créer 1 nouvelle ligne dans la table B avec table_A.client_id = table_B.client_id.

En clair, je souhaiterais que lors que je mette à jour le champ Statut de la table A cela me créer une nouvelle ligne dans la table B et que cela passe les valeurs de certains champs de la table A vers la table B.

Merci bcp pour votre aide.
Cordialement
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. Contributeur
    Je n'est pas trop compris
    0
    1. CREATE OR REPLACE TRIGGER nom_du_trigger
      AFTER UPDATE
      OF Status
      ON ma_table
      REFERENCING NEW AS NEW OLD AS OLD
      FOR EACH ROW
      DECLARE
      --table d'insertion nommée trig
      BEGIN
      INSERT INTO TRIG (val,nom) VALUES (:NEW.nouveau_champs,:NEW.nouveau_champs);--enregistre les nouvelles valeurs
      INSERT INTO TRIG (val,nom) VALUES (:OLD.ancien_champs,:OLD.ancien_champs);--enregistre les anciennes valeurs
      EXCEPTION
      WHEN OTHERS THEN
      -- Consider logging the error and then re-raise
      RAISE;
      END nom_du_trigger;
      /
      J'espere ca pourra t'aider!!
      @+
      0
      1. Je voudrais créer un trigger sur la Table A qui:
        1/ va détecter lorsque le champ 'statut' d'un enregistrement est mis à jour
        2/ va créer une nouvelle ligne dans la Table B + passe les valeurs des champs de la table A vers la table B

        Oups: j'ai oublié de mettre un titre. Désolé, je ne recommencerais plus
        0
        1. Merci Chuka,

          Mais c'est pas ultra clair pour moi qui débute.

          D'après ce que je comprends lors de l'update le trigger va stocker des infos dans une table d'insertion nommée TRIG mais comment je fais des inserts dans ma table B (dans mon exemple) ?

          Autre question, les anciens_champs et nouveaux_champs pointent sur quelle table ?

          Merci et désolé pour ces questions de béociens.
          0
          1. Salut,
            "D'après ce que je comprends lors de l'update le trigger va stocker des infos dans une table d'insertion nommée TRIG"
            C'est le nom que j'ai donné à ma table, elle peut s'appeler B, ou ma_table ou ce que tu veux!!

            "Autre question, les anciens_champs et nouveaux_champs pointent sur quelle table"
            :NEW et :OLD representent respectivement les nouvelles valeurs de ta ligne apres update et les anciennes valeurs avant update.
            cela représentant une ligne, les colonnes sont représentées, dans mon exemple, par .nouveau_champs,et .ancien_champs
            Si ta table A a 4 champs, (ID,date,status,IDEmpl),
            tu auras donc cela:
            CREATE OR REPLACE TRIGGER nom_du_trigger
            AFTER UPDATE
            OF Status
            ON A
            REFERENCING NEW AS NEW OLD AS OLD
            FOR EACH ROW
            DECLARE
            --table d'insertion nommée trig
            BEGIN
            INSERT INTO B (ID,date,status,IDEmpl) VALUES (:NEW.ID,:NEW.date,:NEW.status,:NEW.IDEmpl);
            EXCEPTION
            WHEN OTHERS THEN
            -- Consider logging the error and then re-raise
            RAISE;
            END nom_du_trigger;
            /
            J'ai mis :NEW mais si c'est les anciennes valeurs que tu veux stocker, tu mets :OLD...ou si ta table B à plus de champs tu les stockes où bon te semble....Apres c'est libre court à ton imagination!!!;-)

            @+
            0