{Oracle}

waterblaze Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   -
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 1864 Date d'inscription   Statut Contributeur Dernière intervention   166
 
Je n'est pas trop compris
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   378
 
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