Ho bisogno di ottenere tutti i valori che sono cambiati in una riga e postare modifiche su un'altra tabella di 'controllo'. Posso realizzare questo, senza scrivere le condizioni per ogni elemento dalla riga? So che lo SQL da http://www.firebirdfaq.org/faq133/ che ti dà tutte le condizioni per verifiche:Firebird: ottiene tutti i campi modificati all'interno di 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';
ma questo dovrebbe essere scritto nel trigger. Quindi, se cambio un tavolo, devo modificare il trigger.
A causa del fatto che FireBird non consente di aumentare dinamicamente la dimensione di una variabile varchar, pensavo di trasmettere e concatenare tutti i valori a una grande variabile varchar, prima di inserirlo in un blob di testo.
Esiste la possibilità di eseguire questa operazione, senza utilizzare GTTs?
+1 per inventiva ... ma funziona? [Questo thread di mailing list] (http://groups.yahoo.com/neo/groups/firebird-support/conversations/topics/100294) suggerisce che ① i trigger di tabella di sistema svaniscono quando alcuni tavoli vengono DROPped, e ② questo approccio a meno usato per essere in crash. – pilcrow