Jump to content
Fórum Script Brasil
  • 0

Criação de logs


WildFall
 Share

Question

Boa tarde pessoal, faz uma semana que estou tentando criar uma tabela de log e não consigo, deveria funcionar assim:


Sempre que houver um update ta tabela roupas inserir uma cópia do registro na tabela log, mas eu não consigo fazer isso com a sintaxe certa pro mysql, estou usando a última versão 5.7. Consegui vários exemplos de como fazer isso, mas nenhum funciona nem com alterações, aqui vai um exemplo:

 

CREATE TRIGGER `trg_log` AFTER UPDATE ON `roupas` 
    FOR EACH ROW BEGIN
	INSERT INTO registro (cod_paciente, Descroupa, horariovista, EntradaOuSaida) VALUES(NEW.cod_paciente, NEW.Descroupa, NEW.horariovista, NEW.EntradaOuSaida);

 

Essa é a tabela roupas:

CREATE TABLE IF NOT EXISTS `roupas` (
  `cod_paciente` int(10) NOT NULL,
  `cod_roupa` int(15) NOT NULL PRIMARY KEY AUTO_INCREMENT
  `Descroupa` varchar(500) COLLATE utf8_bin NOT NULL,
  `horariovista` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `SaidaOuEntrada` varchar(10) COLLATE utf8_bin NOT NULL
)

 

Se alguém puder me ajudar ficarei imensamente grato, já estou pesquisando isso há mais de uma semana sem resultados

 

 

Edited by WildFall
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Normalmente eu utilizo uma tabela de histórico (cópia da estrutura da tabela que quero acompanhar, com um campo a mais que é a data hora de entrada no historico.

CREATE TABLE IF NOT EXISTS `roupas_historico` (
  `cod_paciente` int(10) NOT NULL,
  `cod_roupa` int(15) NOT NULL PRIMARY KEY AUTO_INCREMENT
  `Descroupa` varchar(500) COLLATE utf8_bin NOT NULL,
  `horariovista` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `SaidaOuEntrada` varchar(10) COLLATE utf8_bin NOT NULL,
  dtEntradaHistorico datetime
)

O trigger fica assim:

DELIMITER $$

CREATE TRIGGER `nomedobanco`.`trg_log` BEFORE UPDATE ON `nomedobanco`.`teste`
   FOR EACH ROW 
BEGIN
   INSERT INTO roupas_historico(`cod_paciente`, `cod_roupa`, `Descroupa`, `horariovista`, `SaidaOuEntrada`, dtEntradaHistorico)
   VALUES (OLD.`cod_paciente`, OLD.`cod_roupa`, OLD.`Descroupa`, OLD.`horariovista`, OLD.`SaidaOuEntrada`, NOW());
END$$

DELIMITER ;

A gravação do log acontece antes da gravação dos dados desejados. O log recebe os dados que estavam na tabela antes de serem atualizados.

Em minhas tabelas eu utilizo 4 campos a mais que não coloquei aqui que são:

data hora inclusão informação

data hora atualização informação

identificador usuário resp inclusão

identificador usuário resp alteração

Edited by Denis Courcy
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...