{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
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
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
A voir également:
- {Oracle}
- Oracle 11g download windows 64-bit ✓ - Forum Oracle
- Oracle virtualbox telecharger - Télécharger - Émulation & Virtualisation
- Oracle jre usage ✓ - Forum Virus
- Oracle america inc mac - Forum Logiciels
- Taille tablespace oracle - Forum Oracle
5 réponses
kalenwed
Messages postés
1864
Date d'inscription
mardi 10 mars 2009
Statut
Contributeur
Dernière intervention
13 août 2018
166
2 juil. 2009 à 22:11
2 juil. 2009 à 22:11
Je n'est pas trop compris
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
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!!
@+
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!!
@+
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
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
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
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
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.
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.
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
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!!!;-)
@+
"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!!!;-)
@+