Ver Mensaje Individual
  #11  
Antiguo 19-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 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
  /* 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));
    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||'''';
/* --- debug --> */
/* insert into tbdebug (texto) values (:csql);*/
/* <-- debug --- */
    execute statement cSql;
  end
end
Responder Con Cita