Ir para conteúdo

POWERED BY:

Arquivado

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

rookie_fs

[Resolvido] Criando uma Trigger

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.