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

( resolvido ) Erro Trigger


Taichou

Pergunta

:blink: Estou com uma duvida em trigger, preciso atualizar todos os indicadores de oscars, de atores acima de 40, quando um novo ator for adicionado .

asuhsauhuas primeira vez que uso trigger

DELIMITER $$;

CREATE TRIGGER testeref AFTER INSERT ON ator
FOR EACH ROW BEGIN
   if (Idade >= 40) then
      set IndicacaoOscar = IndicacaoOscar + 1;
   end if;
END $$

DELIMITER  $$;

Bom agradeço galera ... :rolleyes:

Editado por Taichou
Melhorar endendimento do código apresentado
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Denis, seguinte, tenho uma tabela ator, nela tenho coluna Idade e coluna IndicacaoOscar, preciso de uma trigger que dispare toda vez que for inserida uma nova linha, e que para cada nova linha inserida, todos os atores com idade maior que 40, recebam mais uma indicação ao oscar. IndicacaoOscar = IndicacaoOscar + 1. Só que nunca usei trigger já li e re li,a especificação e nada ... hasusahusha num sei onde estou errando

Link para o comentário
Compartilhar em outros sites

  • 0
Denis, seguinte, tenho uma tabela ator, nela tenho coluna Idade e coluna IndicacaoOscar, preciso de uma trigger que dispare toda vez que for inserida uma nova linha, e que para cada nova linha inserida, todos os atores com idade maior que 40, recebam mais uma indicação ao oscar. IndicacaoOscar = IndicacaoOscar + 1. Só que nunca usei trigger já li e re li,a especificação e nada ... hasusahusha num sei onde estou errando

No caso do primeiro post, quando a trigger foi disparada ela tentou gravar a informação no registro atual (o novo registro), mas não soube como gravar a informação porque não havia indicação de que tipo de informação Nova (NEW) ou antiga (OLD) ele deveria usar.

Um outro erro foi na forma de como você escreveu a lógica. Você mandou que ele atualizasse somente a linha nova que estava gravando.

Sempre que for escrever uma trigger pense em como seriam as instruções se não houvesse trigger (se você tivesse que fazer na mão).

A correto é:

DELIMITER $$;

CREATE TRIGGER testeref AFTER INSERT ON ator
FOR EACH ROW BEGIN
   UPDATE  ator 
   SET IndicacaoOscar = IndicacaoOscar + 1
   WHERE Idade > 40;
END $$

DELIMITER;$$

Link para o comentário
Compartilhar em outros sites

  • 0
agora o erro mudou,

ERRO: Can't update table 'ator' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. Erro nr 1442

Oi, 'Taichou' !

Desculpe pelo mico. Reli o manual e a conclusão é que não é possível dar qualquer comando (insert/update ou delete), para a mesma tabela, dentro da trigger que está sendo executada.

Não é possível, também, chamar uma storage procedure ou função, que faça esta tarefa (insert/update ou delete para a mesma tabela), dentro da trigger.

A solução é via programação. Após você commitar a transação, dê um update para atualizar os dados necessários.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...