Log. para Auditoria.
Pessoal,
Quem tiver uma rotina para poder gerar um Log de uma tabela automaticamente, e se for possível repassar, por favor eu ficaria muito grato.
Eu fiz uma no Triggers Befor Update de cada tabela, mas não ficou muito professional, pois eu gostaria de pegar os dados antigos ( OLD.´nome do campo´ ) e os dados novos ( NEW.´nome do campo´ ) e gravá-los em um campo Blob SubType 1 na Tabela Log_Sistema. Gostaria também que cada campo ficasse em uma linha no Blob. Se alguém tiver alguma coisa ficarei grato.
Enquanto isto estarei desenvolvendo algo.
Obrigado
Quem tiver uma rotina para poder gerar um Log de uma tabela automaticamente, e se for possível repassar, por favor eu ficaria muito grato.
Eu fiz uma no Triggers Befor Update de cada tabela, mas não ficou muito professional, pois eu gostaria de pegar os dados antigos ( OLD.´nome do campo´ ) e os dados novos ( NEW.´nome do campo´ ) e gravá-los em um campo Blob SubType 1 na Tabela Log_Sistema. Gostaria também que cada campo ficasse em uma linha no Blob. Se alguém tiver alguma coisa ficarei grato.
Enquanto isto estarei desenvolvendo algo.
Obrigado
Stci
Curtidas 0
Respostas
Stci
12/07/2004
/* Script para a Tabela de Agentes para Gerar o Log */
SET NAMES NONE;
CREATE GENERATOR GEN_LOG_SISTEMA;
CREATE GENERATOR GEN_AGENTES;
/* Tabela de Agentes */
CREATE TABLE AGENTES (
AGEN_ID INTEGER NOT NULL,
AGEN_NOME VARCHAR(15),
AGEN_ARQUIVO VARCHAR(30),
AGEN_IMAGEM BLOB SUB_TYPE 1 SEGMENT SIZE 4096
);
/* Chave Primaria */
ALTER TABLE AGENTES ADD CONSTRAINT AGENTES_PK PRIMARY KEY (AGEN_ID);
SET TERM ^ ;
/* Trigger: AGENTES_BU0 */
CREATE TRIGGER AGENTES_BU0 FOR AGENTES
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE C_DADOS VARCHAR(2000);
begin
/* Montando o Texto para Gravar no LOG ( Deste jeito não ficou legal ) */
C_DADOS = OLD.AGEN_ID || ´ --> ´ || NEW.AGEN_ID || ´ * ´ ||
OLD.AGEN_NOME || ´ --> ´ || NEW.AGEN_NOME || ´ * ´ ||
OLD.AGEN_ARQUIVO || ´ --> ´ || NEW.AGEN_ARQUIVO;
/* Inserindo o Registro No Log */
INSERT INTO LOG_SISTEMA (
LOGS_ID, /* Id do Log */
LOGS_OPCAO, /* Opção do Log A=ALteração e E=Exclusão */
LOGS_TABELA, /* Nome da Tabela que está sofrendo a ação */
LOGS_DADOS, /* Dados que foram alterados */
LOGS_DATA, /* Data atual da ação */
USUARIO ) /* Usuario que está logado */
VALUES (
GEN_ID( GEN_LOG_SISTEMA, 1 ),
´A´,
´AGENTES´,
:C_DADOS,
´TODAY´,
´user´
);
end
^
/* Trigger: TBI_AGENTES */
CREATE TRIGGER TBI_AGENTES FOR AGENTES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
NEW.AGEN_ID = GEN_ID( GEN_AGENTES, 1 );
end
^
SET TERM ; ^
/* Script da Tabela LOG_SISTEMA */
CREATE TABLE LOG_SISTEMA (
LOGS_ID INTEGER NOT NULL,
LOGS_OPCAO CHAR(1),
LOGS_TABELA VARCHAR(50),
LOGS_DADOS BLOB SUB_TYPE 0 SEGMENT SIZE 4096,
LOGS_DATA DATE,
USUARIO VARCHAR(30)
);
Resultado de Uma Alteração:
7 --> 7 * ROCKY S --> ROCKY * ROCKY.ACS --> ROCKY.ACS
Aonde tem * eu queria gravar o caracter (#13) para mudar de linha.
Se alguém tiver alguma dica eu agradeço.
SET NAMES NONE;
CREATE GENERATOR GEN_LOG_SISTEMA;
CREATE GENERATOR GEN_AGENTES;
/* Tabela de Agentes */
CREATE TABLE AGENTES (
AGEN_ID INTEGER NOT NULL,
AGEN_NOME VARCHAR(15),
AGEN_ARQUIVO VARCHAR(30),
AGEN_IMAGEM BLOB SUB_TYPE 1 SEGMENT SIZE 4096
);
/* Chave Primaria */
ALTER TABLE AGENTES ADD CONSTRAINT AGENTES_PK PRIMARY KEY (AGEN_ID);
SET TERM ^ ;
/* Trigger: AGENTES_BU0 */
CREATE TRIGGER AGENTES_BU0 FOR AGENTES
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE C_DADOS VARCHAR(2000);
begin
/* Montando o Texto para Gravar no LOG ( Deste jeito não ficou legal ) */
C_DADOS = OLD.AGEN_ID || ´ --> ´ || NEW.AGEN_ID || ´ * ´ ||
OLD.AGEN_NOME || ´ --> ´ || NEW.AGEN_NOME || ´ * ´ ||
OLD.AGEN_ARQUIVO || ´ --> ´ || NEW.AGEN_ARQUIVO;
/* Inserindo o Registro No Log */
INSERT INTO LOG_SISTEMA (
LOGS_ID, /* Id do Log */
LOGS_OPCAO, /* Opção do Log A=ALteração e E=Exclusão */
LOGS_TABELA, /* Nome da Tabela que está sofrendo a ação */
LOGS_DADOS, /* Dados que foram alterados */
LOGS_DATA, /* Data atual da ação */
USUARIO ) /* Usuario que está logado */
VALUES (
GEN_ID( GEN_LOG_SISTEMA, 1 ),
´A´,
´AGENTES´,
:C_DADOS,
´TODAY´,
´user´
);
end
^
/* Trigger: TBI_AGENTES */
CREATE TRIGGER TBI_AGENTES FOR AGENTES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
NEW.AGEN_ID = GEN_ID( GEN_AGENTES, 1 );
end
^
SET TERM ; ^
/* Script da Tabela LOG_SISTEMA */
CREATE TABLE LOG_SISTEMA (
LOGS_ID INTEGER NOT NULL,
LOGS_OPCAO CHAR(1),
LOGS_TABELA VARCHAR(50),
LOGS_DADOS BLOB SUB_TYPE 0 SEGMENT SIZE 4096,
LOGS_DATA DATE,
USUARIO VARCHAR(30)
);
Resultado de Uma Alteração:
7 --> 7 * ROCKY S --> ROCKY * ROCKY.ACS --> ROCKY.ACS
Aonde tem * eu queria gravar o caracter (#13) para mudar de linha.
Se alguém tiver alguma dica eu agradeço.
GOSTEI 0