Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fernando Mariano

[Resolvido] Triggers

Recommended Posts

Bom dia galera,

 

Estou tentando criar uma trigger no MySQL, mas toda vez que tento executar o meu comando retorna diz que tem um erro de sintaxe.

 

CREATE TRIGGER grava_log AFTER INSERT ON log
FOR EACH ROW BEGIN
INSERT INTO log VALUES(null,'SELECT * FROM users', '2012-08-31 00:30', 7, 'cadastrar');
END;

 

 

A mensagem que me retorna é a seguinte.

 

#1064 - Você tem um erro de sintaxe no seu SQL próximo a '' na linha 3 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigo,

 

Olha, não tenho absoluta certeza do que estou falando. Mas eu tentei criar uma Trigger pelo phpMyAdmin e não funcionou, já pelo SQL-Front no mesmo servidor deu certo, mesmo comando igual ao seu.

 

O PhpMyAdmin n]ão dá suporte pra PROCEDURES e FUNCTIONS pelo que eu sei, agora sobre TRIGGERS eu não posso afirmar.

 

Você está usando ele? Se estiver, tente usar outra forma. A sintaxe está certa, então deve ser algo do phpMyAdmin mesmo.

 

Ficamos a disposição, abraços.

 

EDIT:

 

Achei isso aqui: http://danilow.wordpress.com/2008/06/07/trigger-phpmyadmin/

 

Tente pra ver se resolve :D

 

Aqui deu certo, porém o PhpMyAdmin não me deu um retorno dizendo sucesso, mas não deu erro também. E verificando pelo SQL-Front pude ver que a Trigger foi criada.

 

Bem interessante, não sabia que ele confundia os delimitadores. E eu já fui julgando o coitado :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza DiegoAngra07, estou usando o PhpMyAdmin sim, vou testar sem usar e respondo se deu certo. Obrigado por enquanto.

Tranquilo, fico no aguardo. Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Diego, realmente você estava certo, funcionou em no SQL-Front e também testei no MySQL Query Browser, ele criou o Trigger, porém não executou o comando do INSERT que coloquei... Pelo que eu sei deveria gravar o registro. Executei o insert separado e funcionou normalmente. Tem alguma ideia do por que?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta a tabela log aqui, a estrutura.

 

Pelo que eu vi você tá tentando inserir um "SELECT * FROM users" no segundo campo dela, por que?

 

EDIT:

 

Eu nunca fiz uma Trigger de LOG, mas conheço a teoria. Acho que tu deveria estar fazendo como um desses dois casos:

 

http://programero.blogspot.com.br/2008/06/trigger.html

http://www.hardmob.com.br/programacao-and-desenvolvimento/468588-mysql-trigger-de-log.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

id int(11) not null auto_increment

last_sql varchar(220) not null

date_time datetime not null

id_user int(11) not null

type_operation varchar(45) not null

 

 

Essa ali é a estrutura da tabela, os dados que coloquei acima são apenas de teste, pois não estou usando nenhuma linguagem de programação,

estou fazendo a sql para depois integrar com a linguagem.

 

Testei usando o SET e adicionando o NEW, mas mesmo assim não deu certo, até rodou a SQL mas não gravou nada :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum entendi.

 

Tenta não colocar o null no id, omitir ele. Só deixar os outros 4 valores.

 

Outra coisa, você tá tentando fazer uma Trigger "AFTER INSERT ON log" e mandando ela inserir na tabela log também. É assim mesmo?

 

Não seria "AFTER INSERT ON tabela_qualquer" mandar gravar os dados novos na tabela de log?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É amigo, pelo jeito o MySQL tá de mal comigo mesmo. Não quer funcionar de jeito nenhum, ele não grava na log.

 

Vou postar o código da SQL.

 

CREATE TRIGGER grava_log AFTER INSERT ON user  FOR EACH ROW BEGIN  INSERT INTO log (last_sql, date_time, user_id, type_operation) VALUES('teste sql', '2012-08-31 00:30', 7, 'alterar');  END;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na estrutura da tabela você postou:

 

id int(11) not null auto_increment

last_sql varchar(220) not null

date_time datetime not null

id_user int(11) not null

type_operation varchar(45) not null

Mas na Trigger está user_id :

 

CREATE TRIGGER grava_log AFTER INSERT ON user  FOR EACH ROW BEGIN  INSERT INTO log (last_sql, date_time, user_id, type_operation) VALUES('teste sql', '2012-08-31 00:30', 7, 'alterar');  END;

Já tentou executar esse SQL separadamente (fora da Trigger) pra ver se ele insere algo ou dá algum erro?

 

Outra coisa, se o seu campo id_user na tabela log estiver relacionado com o campo da tabela user (chave estrangeira), e esse ID de teste que você está usando não existir, não vai inserir.

 

Vou fazer uns testes aqui, valeu.

 

Mudando o nome dos campos funcionou aqui, se estiver usando o SQL-Front não se esqueça de dar um Refresh pra atualizar as informações no Data Browser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

DiegoAngra07 muito obrigado pela ajuda, consegui fazer funcionar a Trigger.

 

Não sei te dizer o que eu fiz para corrigir, simplesmente eu comecei a faze-la de novo e deu certo, muito obrigado mesmo. E desculpe a demora para responde-lo.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.