Log pegar informação antes de alterar

7 respostas
J

ola pessoal…
ESTOU querendo fazer um procedimento que nao tenho certeza se tem como fazer
bom vamos la.

tenho uma tabela de log que vai registrar as alterações
campos da tabela log
-idLog
-tabelaReferente
-campoReferente
-antigo
-novo

camporReferente é o campo que esta sofrendo alteração na tabela ex: tabela cliente campo nome

como posso fazer esta procedure

DELIMITER $$
CREATE PROCEDURE logDB()

DECLARE idLog int NOT NULL AUTO_INCREMENT;
DECLARE tabelaReferente CHAR(100) NOT NULL;
DECLARE campoReferente CHAR (100) NOT NULL;
DECLARE antigo VARCHAR(200) NOT NULL;
DECLARE novo VARCHAR (200) NOT NULL;
DECLARE data DATE NOT NULL;
DECLARE idUsuario INT NOT NULL;

BEGIN

END
DELIMITER;

o que eu quero e toda alteração que for realizado no banco de dados tipo update e delete seja registrado na tabela
e so um help um exemplo nao quero que faz pra mim

e so que estou perdido no meu próprio raciocínio

7 Respostas

mauricioadl

usa trigger. no after vc pega o valor atual e o novo e chama sua procedure pra grava-los

J

gostei :lol:
tem como da um ex de qual quer coisa so para sintaxe ?

luxu

pode tb colocar dps do comando de gravar um procedimento q disppara a gravacao do log no BD, ou seja, ha N maneiras de fazer…

mauricioadl

ixi cara, sou péssimo de banco de dados, mas eh muito simples encontrar que vc quer. procura no google criar trigger no banco de dados mysql ou oracle ou sei lah qual esta usando.

[]'s

Dakon

O uso de triggers depende se o banco de dados disponibiliza esse recurso.

Por uma questão de maior independência do banco e controle das regras de negócio, sugiro fazer a gravação desse log pela sua própria aplicação. Se você usar DAO, fica até fácil implementar isso.

J

Dakon o banco de dados mysql ate onde eu sei ele suporta.
luxu o que é dps ?

pessoal não estou querendo fazer pela aplicação, quero ver metodo novo desafio :smiley:

olha se estou no caminho

DELIMITER $$  
CREATE PROCEDURE logDB()  
  
DECLARE idLog int NOT NULL AUTO_INCREMENT;  
DECLARE tabelaReferente CHAR(100) NOT NULL;  
DECLARE campoReferente CHAR (100) NOT NULL;  
DECLARE antigo VARCHAR(200) NOT NULL;  
DECLARE novo VARCHAR (200) NOT NULL;  
DECLARE data DATE NOT NULL;  
DECLARE idUsuario INT NOT NULL;  
  
BEGIN  

//pega dados ja existente na minha tabela  
$tabela = "nao sei se tem como pegar o nome da tabela ou ate mesmo declara variavel";
$reference='campo referencia';
$antigo = 'nome antigo que esta na tabela';

//estes campos vem com a consulta da minha aplicação
$novo = 'recebe alteracao';
$usuario = 'idUsuario';

AFTER insert ON $tabela
    FOR EACH ROW
    BEGIN
    INSERT INTO logDB VALUES (new.tabelaReferente = $tabela, new.campoReferente= $reference, new.antigo = $antigo, new.novo=$novo, new.data= CURRENT_TIMESTAMP, new.idUsuario = $usuario,);

END  
DELIMITER;

a questao da tabela e o campo nao faço a menor ideia como pegar o nome, ou sera que consigo pegar o nome da tabela e o campo que esta sofrendo alteração atraves da ALTER TABELA que vai da minha aplicação ?

J

pessoal agora estou precisando de uma ajuda de vocês, como consigo pegar o nome de uma tabela informada pelo consulta do sistema

tipo SELECT * FROM usuario

de dentro do mysql tem como eu pegar o nome da tabela solicitado pelo select ou update ou delete.

deu pra entender ? :roll:

tipo tabela solicitada foi tabela usuario. nao sei se com show tables tem como me informar algo

Criado 28 de março de 2012
Ultima resposta 28 de mar. de 2012
Respostas 7
Participantes 4