rookie_fs 0 Denunciar post Postado Novembro 13, 2012 O que estou fazendo de errado nesse trecho? Quero que quando for criado um novo administrador, o banco associe uma hash do id criado. O erro informado é: #1064 - Você tem um erro de sintaxe no seu SQL próximo a '' na linha 6 CREATE TRIGGER after_insert_admin AFTER INSERT ON administrador FOR EACH ROW BEGIN DECLARE idUltimo int(11); -- Acha o id do ultimo registro SELECT idAdmin INTO idUltimo FROM administrador ORDER BY idAdmin DESC LIMIT 1; -- Atualiza o hash UPDATE administrador SET hash = MD5(idUltimo) WHERE idAdmin = idUltimo; END; Compartilhar este post Link para o post Compartilhar em outros sites
marceloaltmann 0 Denunciar post Postado Novembro 13, 2012 nao vejo nenhum problema na sua trigger: mysql> delimiter $$ mysql> CREATE TRIGGER after_insert_admin -> AFTER INSERT -> ON administrador -> FOR EACH ROW BEGIN -> -> DECLARE idUltimo int(11); -> -> -- Acha o id do ultimo registro -> SELECT idAdmin INTO idUltimo -> FROM administrador -> ORDER BY idAdmin DESC -> LIMIT 1; -> -> -- Atualiza o hash -> UPDATE administrador SET hash = MD5(idUltimo) WHERE idAdmin = idUltimo; -> -> END; -> $$ Query OK, 0 rows affected (0.16 sec) mysql> show triggers\G *************************** 1. row *************************** Trigger: after_insert_admin Event: INSERT Table: administrador Statement: BEGIN DECLARE idUltimo int(11); SELECT idAdmin INTO idUltimo FROM administrador ORDER BY idAdmin DESC LIMIT 1; UPDATE administrador SET hash = MD5(idUltimo) WHERE idAdmin = idUltimo; END Timing: AFTER Created: NULL sql_mode: Definer: root@localhost character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci 1 row in set (0.01 sec) mysql> voce pode estar tendo problemas com o delimiter, troca ele para $$ como eu fiz ali no inicio e tenta rodar novamente Compartilhar este post Link para o post Compartilhar em outros sites
rookie_fs 0 Denunciar post Postado Novembro 13, 2012 Eis um erro: #1442 - Can't update table 'administrador' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. Andei pesquisando a respeito. Esse erro seria referente à versão do SQL? Compartilhar este post Link para o post Compartilhar em outros sites
marceloaltmann 0 Denunciar post Postado Novembro 13, 2012 nao creio que seja relacionado a versao do db, qual comando tu esta rodando pra receber esse erro? Compartilhar este post Link para o post Compartilhar em outros sites
rookie_fs 0 Denunciar post Postado Novembro 13, 2012 Apenas inserindo um novo registro. Pelo que li, essa operação que eu estou tentando fazer não é suportada pelo mysql, apenas pelo ORACLE e MSSQL. Afirmam que o MySQL cria uma recursão infinita da trigger. Ou seja, depois de um insert a trigger é chamada e um update executado na trigger, esse update acaba disparando a trigger também e assim vai. Estou procurando uma solução para isso. Compartilhar este post Link para o post Compartilhar em outros sites
marceloaltmann 0 Denunciar post Postado Novembro 13, 2012 ok, nessa caso tu pode criar tua trigger assim: CREATE TRIGGER `after_insert_admin` BEFORE INSERT ON `administrador` FOR EACH ROW BEGIN set NEW.hash = MD5(NEW.idAdmin); END Compartilhar este post Link para o post Compartilhar em outros sites
rookie_fs 0 Denunciar post Postado Novembro 13, 2012 Perfeito. Muito obrigado. (Marca resolvido ae cumpadi!) :grin: Compartilhar este post Link para o post Compartilhar em outros sites