Trigger ON UPDATE [RESOLVIDO]

6 respostas
M

Pessoal, não estou conseguindo criar uma TRIGGER no update.

DELIMITER $$
CREATE TRIGGER update_hist_maq AFTER UPDATE ON COMP_MAQUINA
 FOR EACH ROW BEGIN
  DECLARE prod varchar(100);
  SELECT C.NOME INTO prod FROM COMPONENTES C WHERE C.ID = NEW.COMPONENTE;
 INSERT INTO HIST_COMP_MAQUINA SET MAQUINA = OLD.MAQUINA, STATUS = 'SUBSTITUIDO', COMPONENTE = OLD.COMPONENTE, SERIAL = OLD.SERIAL, QTD = OLD.QTD, DT = OLD.DT, DESCRICAO =  concat('SUBSTITUIDO POR: ',prod); 
INSERT INTO HIST_COMP_MAQUINA SET MAQUINA = NEW.MAQUINA, STATUS = 'ADICIONADO', COMPONENTE = NEW.COMPONENTE, SERIAL = NEW.SERIAL, QTD = NEW.QTD, DT = NOW(), DESCRICAO = 'COMPONENTE ADICIONADO' ;
END$$
DELIMITER;

O erro que aparece é:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL version for the right systax to use near 'END$$ DELIMITER.

Não tenho idéia porquê está acontecendo esse erro, será que alguém consegue me ajudar?.

Obrigado.

6 Respostas

E

END $$
Coloca uma quebra de linha entre end e $$.

O Delimiter é um comando do mysql query browser, não dá para usar outro cliente sql?

drsmachado

evefuji:
END $$
Coloca uma quebra de linha entre end e $$.

O Delimiter é um comando do mysql query browser, não dá para usar outro cliente sql?


Não, o delimiter é uma opção do MySQL para que você consiga utilizar comandos SQL sem confundir a procedure/trigger/function, isso, por que, toda instrução do MySQL precisa ser realizada com o “;” ao fim ou, então, com um delimiter pré definido.

M

evefuji:
END $$
Coloca uma quebra de linha entre end e $$.

O Delimiter é um comando do mysql query browser, não dá para usar outro cliente sql?

Não deu certo.

Tentei por outro cliente sql, mas dá o mesmo erro com e sem o DELIMITER.

Nessa mesma tabela tenho mais 2 triggers uma no evento AFTER INSERT e outra no AFTER DELETE.

Só no UPDATE que está dando esse erro.

Hebert_Coelho

Tenta ao invés de END$$ colocar END;

M

Pessoal,
Encontrei o erro.

Era uma coluna que estava declarada errada!

Obrigado pela ajuda.

E

drsmachado:
evefuji:
END $$
Coloca uma quebra de linha entre end e $$.

O Delimiter é um comando do mysql query browser, não dá para usar outro cliente sql?


Não, o delimiter é uma opção do MySQL para que você consiga utilizar comandos SQL sem confundir a procedure/trigger/function, isso, por que, toda instrução do MySQL precisa ser realizada com o “;” ao fim ou, então, com um delimiter pré definido.
bom, para mim o comando Delimiter só funciona no mysql query browser,e se eu uso outro cliente sql (como o winsql, ou squirrel sql) para criar uma sp nunca deu erro. Talvez dependa da versão do mysql que eu estava usando (o delimiter padrão ser outro, não o :wink:

Criado 9 de novembro de 2011
Ultima resposta 9 de nov. de 2011
Respostas 6
Participantes 4