{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. 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
    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. 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. 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. Contributeur
            Je n'est pas trop compris
            0