Hallo,
ich möchte im Trigger erkennen, ob überhaupt Änderungen erfolgt sind.
Dafür habe ich eine Procedure zum Generieren des SQL geschrieben:
Im Trigger versuche ich dann, das Statement zu starten:
Aber er sagt: Column unknown: OLD.ID
Jetzt sieht es so aus, als ob execute statement mit old nicht kann.
Kann das jemand bestätigen oder habe ich nur einen Fehler gemacht.
Ich habe das Problem, dass ich über einen View mehrere tabellen update.
Jetzt schreibt er z.B. in die Tabelle Adresse über den Trigger, dass Benutzer XYZ den Datensatz geändert hat. Tatsächlich hat er aber nur die Kundennummer geändert. Und das möchte ich verhindern.
Leider gibt es im Trigger kein MODIFIED oder so.
Danke, Frank
ich möchte im Trigger erkennen, ob überhaupt Änderungen erfolgt sind.
Dafür habe ich eine Procedure zum Generieren des SQL geschrieben:
Code:
SET TERM ^ ; CREATE OR ALTER PROCEDURE GET_MODIFIED_SQL ( table_name varchar(31)) returns ( result varchar(10000)) as declare variable zaehler integer = 0; declare variable field_name varchar(31); begin result = 'select case when ('; for select trim(rdb$field_name) from rdb$relation_fields where rdb$relation_name = :table_name and rdb$update_flag=1 into :field_name do begin if (:zaehler = 0) then result = result||'(old.'||:field_name||' is distinct from new.'||:field_name||') '; else result = result||' or (old.'||:field_name||' is distinct from new.'||:field_name||') '; zaehler = zaehler + 1; end result = result||') then ''T'' else ''F'' end from rdb$database'; suspend; end^ SET TERM ; ^ GRANT EXECUTE ON PROCEDURE GET_MODIFIED_SQL TO SYSDBA;
Code:
CREATE OR ALTER trigger adresse_bu0 for adresse active before update position 0 as declare variable modified_sql varchar(10000); declare variable is_modified char(1); begin select result from get_modified_sql('ADRESSE') into :modified_sql; execute statement :modified_sql into :is_modified; if (is_modified = 'T') then new.anzahl = coalesce(old.anzahl, 0) + 1; end
Jetzt sieht es so aus, als ob execute statement mit old nicht kann.
Kann das jemand bestätigen oder habe ich nur einen Fehler gemacht.
Ich habe das Problem, dass ich über einen View mehrere tabellen update.
Jetzt schreibt er z.B. in die Tabelle Adresse über den Trigger, dass Benutzer XYZ den Datensatz geändert hat. Tatsächlich hat er aber nur die Kundennummer geändert. Und das möchte ich verhindern.
Leider gibt es im Trigger kein MODIFIED oder so.
Danke, Frank
Comment