Mise au point de trigger (SQL92)
salut,
j'utilise FRONTBASE(slq92) sous OSX et je désire copier l'enregistrement d'une table T_CLIENT
vers T_CLIENT_HISTO avant sa modification.
la syntaxe suivante à pour effet de copier l'intégralité des enregistrements
j'en convient, mais ceci m'a permis de valider le fonctionnement du trigger.
alors comment puis-je faire pour ne copier que l'enregistrement en cours de
modification...autrement dit "insert into T_CLIENT_HISTO select T_CLIENT.* from T_CLIENT WHERE ID_CLIENT = ??? "
syntaxe testé !
Code:
1 2 3 4 5
| CREATE TRIGGER trig_client
BEFORE UPDATE ON T_CLIENT FOR EACH ROW
BEGIN
insert into T_CLIENT_HISTO select T_CLIENT.* from T_CLIENT WHERE ID_CLIENT = ID_CLIENT;
END |
j'espère que j'ai été assez clair dans ma requête!
merci à tous
Mise au point de trigger (SQL92)
merci, pour la réponse, TryExeptEnd
à noté que Frontbase est basé sur du sql92
j'ai testé des syntaxe utilisant: old.nom-champ et new.nom-champ tel que:
*
Code:
1 2 3 4 5 6
|
CREATE TRIGGER trig_client
BEFORE UPDATE ON T_CLIENT FOR EACH ROW
BEGIN
insert into T_CLIENT_HISTO select T_CLIENT.* from T_CLIENT WHERE ID_CLIENT = :old.ID_CLIENT;
END |
*
resultat, la creation du trigger échou , que ce soit avec ":old." ou "old."
d'ailleur, il me semblais que ":old." était propre à Oracle !
il faudrait contourné le problème en récupérant la valeur de l'index de l'enregistrement en cour de modification et faire quelque chose comme :
*
Code:
1 2 3 4 5 6
|
CREATE TRIGGER trig_client
BEFORE UPDATE ON T_CLIENT FOR EACH ROW
BEGIN
insert into T_CLIENT_HISTO select T_CLIENT.* from T_CLIENT WHERE index = valeur-index;
END |
*
help,help
Mise au point de trigger (SQL92)
OLD ou NEW seul ne passe pas non plus...je vais voir à nouveau sur le site de frontbase.
Mise au point de trigger (SQL92)
Salut à tous ,
pour info, les docs frontbase font tous référence à SQL92,
quelqu'un aurait il un lien pour une doc détaillé de SQL92,pour y voir
la syntaxe d'un trigger de mon type !
Mise au point de trigger (SQL92)
Merci beaucoup,
j'ai eu un peu de mal à adapté la syntaxe à mon cas de figure,
mais ça marche !!!
note:"ATOMIC" ne passe pas !?!
sa donne ça:
*
Code:
1 2 3 4 5 6 7 8
|
CREATE TRIGGER trig_client
BEFORE UPDATE
ON T_CLIENT REFERENCING NEW ROW as new
FOR EACH ROW
BEGIN
insert into T_CLIENT_HISTO select T_CLIENT.* from T_CLIENT WHERE ID_CLIENT = new.ID_CLIENT;
END |
*
@+ et merci, merci encore