Em 9/8/2012 17:03, Sergio escreveu:
> Hello! I'm trying to do a trigger to maintain a history table. I'm using (for
> the first time!) execute statement. What I want to do is very simple: if a
> field change I save the old value in the history
>
> When I execute the trigger I get an error:
>
> Invalid token.
> Dynamic SQL Error.
> SQL error code = -104.
> Token unknown - line 1, column 1.
> if.
>
> I'm sure I'm using "execute statement" in the wrong way !!!
>
> this is the trigger:
>
>
> CREATE OR ALTER trigger tlm_maestro_au0 for tlm_maestro
> active after update position 0
> AS
> declare variable loc_nuevo_id id;
> declare variable loc_ejecutar descripcion_larga;
> begin
>
> loc_nuevo_id = gen_id(gen_tlm_maestro_hist,1);
>
> insert into tlm_maestro_hist (id,modificado) values (:loc_nuevo_id,
> current_timestamp);
>
> for
> select
> 'if (new.' || trim(rdb$field_name) || ' is distinct from old.' ||
> trim(rdb$field_name) ||
> ') then update tlm_maestro_hist set ' || trim(rdb$field_name) || ' =
> old.' || trim(rdb$field_name) || ' where id = :loc_nuevo_id;'
> from
> rdb$relation_fields
> where
> rdb$relation_name = 'TLM_MAESTRO'
> into
> :loc_ejecutar
> do
> begin
> execute statement loc_ejecutar;
> end
>
> end
>
>
There is no IF fucntion in FB, did you meant IIF ???
see you !