En el artículo:

https://firebird21.wordpress.com/2013/06/26/registrando-errores-en-una-tabla-de-log/

se deslizó un error involuntario, dice:

SET TERM ^ ;

CREATE TRIGGER LOG_BI FOR LOG
   ACTIVE BEFORE INSERT
   POSITION 1
AS
BEGIN

   NEW.LOG_USUARI = CURRENT_USER;
   NEW.LOG_FECHOR = CURRENT_TIMESTAMP;
   NEW.LOG_COMPUT = (SELECT M.MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS M WHERE M.MON$ATTACHMENT_ID = CURRENT_CONNECTION);

END^

SET TERM ; ^

pero allí no se debe emplear la variable de contexto CURRENT_TIMESTAMP porque ella tiene la fecha y hora en que empezó la transacción, que no es lo que queremos. Lo que queremos es que muestre la fecha y la hora en que ocurrió cada inserción dentro de la tabla de LOG.

El trigger correcto es el siguiente:

SET TERM ^ ;

CREATE TRIGGER LOG_BI FOR LOG
   ACTIVE BEFORE INSERT
   POSITION 1
AS
BEGIN

   NEW.LOG_USUARI = CURRENT_USER;
   NEW.LOG_FECHOR = CAST('NOW' AS TIMESTAMP);
   NEW.LOG_COMPUT = (SELECT M.MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS M WHERE M.MON$ATTACHMENT_ID = CURRENT_CONNECTION);

END^

SET TERM ; ^

 Porque ‘NOW’ sí nos da la fecha y hora actuales, en cualquier instante.

Anuncios