Bonjour à tous,
Je rencontre un problème pour lequel j'aurais bien besoin de votre aide. Le but est de créer un trigger qui sauvegarde dans une table historique le changement des champs d'une base de données. La base de données pouvant évoluer, il faudrait que cela soit "générique". un exemple :
Table
Personne (ID, Nom, Prenom, Adresse, DateNaissance)
Historique(ID_Historique, ID_personne, Table, Champs, OldValue, NewValue, Utilisateur, DateEvenement)
Voila le schema pour simplifier.
A la modificartion d'un enregistrement de la table personne un trigger sera déclenché pour historiser ce changement. Seuls les champs modifiées feront l'objet d'une insertion dans la table historique. Le but est de créer le trigger sans qu'on ait à le modifier par la suite si l'on ajoute un nouveau champs dans la table personne. J'ai quelques pistes mais je n'arrive pas à cercler le problème.
mes pistes sont:j'en ait déduit un code sql à peu près comme celui la
- Récupérer les champs dynamiquement à partir de la table système RDB$RELATION_FIELDS
- comparer la valeur des champs de old et new à l'aide de la liste précédente
mais ne compile pas :field ne peut pas être utilisé comme ça. Auriez-vous d'autres idées...
Voila je pense vous avoir expliqué le problème et j'espère que vous serez à même de povoir m'aider.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 for select RDB$FIELD_NAME from RDB$RELATION_FIELDS where RDB$RELATION_NAME = 'Personne' into :field do begin if (old.:field <> new.:field) insert into historique values(gen_id(gen_histo, 1), new.id, 'Personne', :field, old.:field, new.:field, current_user, current_timestamp); end
Merci par avance à ceux qui voudront se donner la peine de lire tout ça.
Partager