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...
Pergunta
Angelbel
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
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.