Pues he estado probando y no me funciona, no sé si no vale para los triggers, aunque no da error ninguno, simplemente no se ejecuta.
He probado a guardar la sentencia creada en una tabla tbDebug y es correcta, así que no lo entiendo porque el código "normal" sí que funciona, lo he puesto al final, en comentario.
¿Podéis hacer una pruebecita con triggers en lugar de store procedure?
Estoy usando firebird 2.1
Código SQL
[-]
CREATE OR ALTER trigger tbapuntes_ai0 for tbapuntes
active after insert position 0
AS
declare variable iMes integer;
declare variable cCampoDebe varchar(8);
declare variable cCampoHaber varchar(8);
declare variable cSql varchar(1024);
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));
cSql = 'update tbsaldoscuentas ' ||
'set debetotal=debetotal+new.debe, ' ||
'habertotal=habertotal+new.haber, ' ||
cCampoDebe || '=' || cCampoDebe || '+new.debe, ' ||
cCampoHaber || '=' || cCampoHaber || '+new.haber ' ||
'where codigoempresa=codigoempresa ' ||
'and ejercicio=ejercicio ' ||
'and codigocuenta=codigocuenta';
execute statement cSql;
end
end