Ir para conteúdo
Fórum Script Brasil
  • 0

Trigger com erro de sintaxe


Angelbel

Pergunta

Boa tarde! Acabei de me registrar e to trazendo um tópico q se alguém puder me ajudar agradeço muito!

É o seguinte, tenho um BD (Estoque) no qual acabei de criar uma tabela histórico em q são inseridos registros através de uma trigger quando uma outra tabela produto é atualizada. No entanto, gostaria q esses registros fossem inseridos somente quando um campo da tabela produtos fosse atualizado. P isso criei um outro banco q uso como teste e criei as duas tabelas e a trigger a seguir:

tb_produto: id int (11) - primary key

produto varchar (50)

qtde int (4)

dt_entrada timestamp

tb_historico: dt_mod timestamp - primary key

id_produto int (11)

qt_ant int (4)

qt_nov int (4)

Código da Trigger:

CREATE TRIGGER atualizaestoque AFTER UPDATE ON produto

FOR EACH ROW BEGIN

IF OLD.qtde<> NEW.qtde THEN

INSERT INTO historico SET id_produto = NEW.id,

qt_ant = OLD.qtde,

qt_nov = NEW.qtde,

END;

Erro: #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 7

Já tentei outras formas e sempre aparece esse erro com a diferença da linha especificada, por exemplo:

CREATE TRIGGER atualizaestoque AFTER UPDATE ON produto

FOR EACH ROW BEGIN

IF OLD.qtde<> NEW.qtde THEN

INSERT INTO historico (id_produto, qt_ant, qt_nov) VALUES (NEW.id, OLD.qtde, NEW.qtde)

END;

Erro: #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 'INSERT INTO historico (id_produto, qt_ant, qt_nov) VALUES (NEW.id, OLD.qtde, NEW' at line 4

Já tentei diversas formas...com END IF da um erro sem especificação, ta dificil...meu SO é Windows XP e to utilizando o phpmyadmin p editar o BD as tabelas e triggers...a idéia ai é quando houver um update na tabela produto verificar se a qtde foi alterada e só então inserir uma linha de histórico para o produto referenciado, o código a baixo funciona perfeitamente, porém é para toda e qualquer atualização na tabela produto independente dos campos alterados.

CREATE TRIGGER atualizahistorico BEFORE UPDATE ON produto

FOR EACH ROW

INSERT INTO historico (id_produto, qt_ant, qt_nov)

VALUES (NEW.id, OLD.qtde, NEW.qtde);

Preciso do outro jeito, se alguém puder me dar uma luz agradeço muito...

Vlw galera!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Creio que o correto seria:

CREATE TRIGGER atualizaestoque AFTER UPDATE ON produto
FOR EACH ROW BEGIN
IF OLD.qtde<> NEW.qtde THEN
INSERT INTO historico (id_produto, qt_ant, qt_nov) VALUES (NEW.id, OLD.qtde, NEW.qtde);
END IF;
END;

Faltou o ; depois do INSERT e o END IF;

Att,

Stoma

Link para o comentário
Compartilhar em outros sites

  • 0
Creio que o correto seria:

CREATE TRIGGER atualizaestoque AFTER UPDATE ON produto
FOR EACH ROW BEGIN
IF OLD.qtde<> NEW.qtde THEN
INSERT INTO historico (id_produto, qt_ant, qt_nov) VALUES (NEW.id, OLD.qtde, NEW.qtde);
END IF;
END;

Faltou o ; depois do INSERT e o END IF;

Att,

Stoma

Vlw Stoma, mas o erro persiste...

#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 'INSERT INTO historico (id_produto, qt_ant, qt_nov) VALUES (NEW.id, OLD.qtde, NEW' at line 4

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...