Ir para conteúdo

Arquivado

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

tigredonorte

Trigger Mysql

Recommended Posts

Estou tentando inserir uma trigger no banco de dados que seja capaz de alterar a tabela usuario quando inserir algo na tabela usuario_acesso. Eis o meu código

 

[inline]CREATE TRIGGER usuario_acesso_update_status
BEFORE INSERT ON usuario_acesso
FOR EACH ROW
BEGIN
UPDATE usuario
SET user_uacesso = NOW(),
status = 'online',
WHERE cod_usuario = NEW.cod_usuario;

END[/inline]

 

Porém está dando o seguinte erro

 

[inline]

#1064 - You have an error in your SQL syntax;

check the manual that corresponds to your MySQL server version for the

right syntax to use near '' at line 8

[/inline]

 

Só para explicar melhor o que a trigger deveria fazer...
tenho a tabela usuário com a lista de usuários, o status (online/offline), e o código do usuário e a tabela usuario_acesso que grava um log de ações do usuário (o código do usuário, a data de acesso a uma página, a página, etc). Preciso colocar o ultimo acesso do usuário como now() e seu status = online quando um log para aquele usuário for salvo...

 

Alguém faz ideia do que está errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

status = 'online'

 

 

Tem uma vírgula sobrando, creio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem.. a vírgula também era um problema... Mas não resolveu. Creio que coloquei esta vírgula a mais quando digitei o código aqui..

segue o código corrigido sem a vírgula e o erro que continua ocorrendo:

CREATE TRIGGER usuario_acesso_update_status

BEFORE INSERT ON usuario_acesso

FOR EACH ROW

BEGIN

UPDATE usuario

SET user_uacesso = NOW(),

status = 'online'

WHERE cod_usuario = NEW.cod_usuario;

END

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 15

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erro de certas linguagens deixa qualquer um doido , script tem 9 linhas , dá erro na 15 ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que deu 15 linhas pois eu coloquei uma linha entre cada linha do código.. Se eu colocar assim:

CREATE TRIGGER usuario_acesso_update_status
BEFORE INSERT ON usuario_acesso
FOR EACH ROW
BEGIN
UPDATE usuario
SET user_uacesso = NOW(),
status = 'online'
WHERE cod_usuario = NEW.cod_usuario;
END

aí o erro vai pra linha 8:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 8

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer uso do DELIMITER:

DELIMITER //
CREATE TRIGGER usuario_acesso_update_status
BEFORE INSERT ON usuario_acesso
FOR EACH ROW
BEGIN
UPDATE usuario
SET user_uacesso = NOW(),
status = 'online'
WHERE cod_usuario = NEW.cod_usuario;
END //
DELIMITER ;

Pelo delimitador de queries ser o ";", a query funcionaria somente até o ponto e vírgula, ou até o END neste caso.

 

Outra solução pode ser remover mais este ";" da linha 8. Ou então remover o BEGIN e o END, afinal, é somente uma query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho.. consegui resolver o problema da seguinte forma:

CREATE TRIGGER usuario_acesso_update_status
BEFORE INSERT ON usuario_acesso
FOR EACH ROW
BEGIN
    UPDATE usuario SET user_uacesso = NOW(),status = 'online' WHERE cod_usuario = NEW.cod_usuario;
END 

Ao colocar o comando inteiro na linha funcionou o0

 

Se alguém souber me explica isso porque está estranho... (Mas no fim, funcionou..)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que vou dizer não passa de uma suposição.

 

Ao criar a Trigger, o banco deve remover as quebras de linha ficando algo como "UPDATE usuarioSET user_uacesso = NOW(),status = 'online'WHERE cod_usuario = NEW.cod_usuario;", unindo palavras sabe...

 

Mas como disse, é uma suposição. =T

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.