Ver Mensaje Individual
  #7  
Antiguo 18-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Reputación: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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
  /* actualizar tbSaldosCuentas */
  if (new.codigoborrador>0) then  /* es borrador */
  begin
    update tbSaldosCuentas
    set debetotal=debetotal+new.debe,
        habertotal=habertotal+new.haber
    where codigoempresa=codigoempresa
    and ejercicio=ejercicio
    and codigocuenta=codigocuenta;
  end
  else /* no es borrador, es definitivo */
  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';
/* >>> debug >>> */
/* insert into tbdebug (texto) values (:csql); */
/* <<< debug <<< */
    execute statement cSql;
  end

/* esto funciona */
/*
    update tbsaldoscuentas
    set debetotal  = debetotal  + new.debe,
        habertotal = habertotal + new.haber,
        debe12  = debe12  + new.debe,
        haber12 = haber12 + new.haber
    where codigoempresa=codigoempresa
    and ejercicio=ejercicio
    and codigocuenta=codigocuenta;
*/
end
Responder Con Cita