Pues parece que sí, que es similar, el caso es que execute statement necesita la cadena completa, no se le puede pasar un campo para que obtenga el valor del mismo. En fin, no es muy práctico pero parece que va bien así:
Código SQL
[-]
CREATE OR ALTER trigger tbapuntes_ai1 for tbapuntes
active after insert position 1
AS
declare variable iMes integer;
declare variable cCampoDebe varchar(8);
declare variable cCampoHaber varchar(8);
declare variable cSql varchar(1024);
declare variable cValorDebe varchar(18);
declare variable cValorHaber varchar(18);
begin
if (new.codigoborrador>0) then
begin
update tbSaldosCuentas
set debetotal=debetotal+new.debe,
habertotal=habertotal+new.haber
where codigoempresa=codigoempresa
and ejercicio=ejercicio
and codigocuenta=codigocuenta;
end
else
begin
iMes = extract(month from new.fechaasiento);
cCampoDebe = 'debe' || cast(iMes as varchar(2));
cCampoHaber = 'haber' || cast(iMes as varchar(2));
cValorDebe = cast(new.debe as varchar(18));
cValorHaber = cast(new.haber as varchar(18));
cSql = 'update tbsaldoscuentas '||
'set debetotal=debetotal+'||cValorDebe||
',habertotal=habertotal+'||cValorHaber||','||
cCampoDebe || '=' || cCampoDebe || '+'||cValorDebe||','||
cCampoHaber || '=' || cCampoHaber || '+'||cValorHaber||
' where codigoempresa='||cast(new.codigoempresa as varchar(18))||
' and ejercicio='||cast(new.ejercicio as varchar(18))||
' and codigocuenta='||''''||new.codigocuenta||'''';
execute statement cSql;
end
end