Je dois obtenir toutes les valeurs qui ont changé dans une rangée et afficher les modifications sur d'autres tables 'audit'. Puis-je accomplir ceci, sans écrire les conditions pour chaque élément de la rangée? Je sais que le SQL à partir http://www.firebirdfaq.org/faq133/ qui vous donne toutes les conditions de vérifications:Firebird - Récupère tous les champs modifiés dans un trigger
select 'if (new.' || rdb$field_name || ' is null and old.' ||
rdb$field_name || ' is not null or new.' || rdb$field_name ||
'is not null and old.' || rdb$field_name || ' is null or new.' ||
rdb$field_name || ' <> old.' || rdb$field_name || ') then'
from rdb$relation_fields
where rdb$relation_name = 'EMPLOYEE';
mais cela doit être écrit dans le déclencheur. Donc, si je change une table, j'ai besoin de modifier le déclencheur. Étant donné que FireBird ne permet pas d'augmenter dynamiquement la taille d'une variable varchar, je pensais lancer et concaténer toutes les valeurs dans une grande variable varchar, avant de l'insérer dans un blob de texte.
Y at-il une possibilité d'accomplir ceci, sans utiliser GTTs?
+1 pour l'inventivité ... mais ça marche? [Ce thread de liste de diffusion] (http://groups.yahoo.com/neo/groups/firebird-support/conversations/topics/100294) suggère que trig les déclencheurs de la table système disparaissent quand une table est droppée, et ② cette approche à moins utilisé pour être crashy. – pilcrow