{Oracle}

Fermé
waterblaze Messages postés 16 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 22 novembre 2015 - 2 juil. 2009 à 22:10
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 3 juil. 2009 à 08:13
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

5 réponses

kalenwed Messages postés 1840 Date d'inscription mardi 10 mars 2009 Statut Contributeur Dernière intervention 13 août 2018 166
2 juil. 2009 à 22:11
Je n'est pas trop compris
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
2 juil. 2009 à 22:25
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
waterblaze Messages postés 16 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 22 novembre 2015
2 juil. 2009 à 22:26
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
waterblaze Messages postés 16 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 22 novembre 2015
2 juil. 2009 à 22:39
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
3 juil. 2009 à 08:13
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