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

Problemas com trigger


Leob

Pergunta

Tenho a tabela limite com os seguintes campos:

Lim_id

Cli_salario

Lim_disponivel

Lim_utilizado

Gostaria de fazer uma trigger onde se o campo lim_utilizado fosse atualizado ela subtraisse este valor do lim_disponivel.

Tentei fazer assim, mas sou muito iniciante em Mysql e devo estar fazendo algo de errado

create trigger limite After Update on limite
FOR EACH ROW
Begin

If New.lim_utilizado<>Old.lim_utilizado then
Update limite set lim_disp=lim_disp - lim_utilizado;
End If;
End;

Mas quando eu atualizo o valor do lim_utilizado nada acontece com o limp_disp. Espero que alguém possa ajudar

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'Leob'

São dois os erros que você está cometendo.

Primeiro erro:

Você está tentando usar um UPDATE dentro do trigger, para a tabela que está disparando o trigger.

O MySQL não permite os comandos de INSER, UPDATE e DELETE dentro do trigger, quando estes comandos se referenciam a propria tabela.

Veja como você disparou um DEAD LOCK: Você acionou um update, que acionou o trigger, que acionou o update, que aciona o trigger, ..., infinitamente.

Segundo erro:

Você está usando o trigger como AFTER UPDATE e está tentando comparar OLD com NEW.

Esta comparação não é possivel pois o OLD virou NEW após o UPDATE. Neste caso o resultado da comparação sempre será uma igualdade.

O codigo correto:

Antes de fazer, verifique se os atributos lim_disp e lim_utilizado são NÃO NULOS e possuem VALOR DEFAULT.

É importante que seja assim.

create trigger limite before Update on limite
FOR EACH ROW
Begin
   If New.lim_utilizado <> Old.lim_utilizado then
      SET NEW.lim_disp = OLD.lim_disp - NEW.lim_utilizado;
   End If;
End;

Tenta ai e ve se o reultado é o desejado.

Link para o comentário
Compartilhar em outros sites

  • 0

create trigger limite before Update on limite
FOR EACH ROW
Begin
   If New.lim_utilizado <> Old.lim_utilizado then
      SET NEW.lim_disp = OLD.lim_disp - (NEW.lim_utilizado-Old.lim_utilizado);
   End If;
End;

Era quase isso eu só mudei uma coisa que não tinha explicado direito.

Agora deu certinho, muito obrigado! Uma ultima dúvida eu posso colocar mais de uma trigger ligada em 1 tabela ?

Por exemplo eu tenho está trigger que atualiza o limite disponível para utilização e agora gostaria de fazer uma onde se o salário for aumentado o limite aumenta, já que o limite é calculado com base no salario.

Link para o comentário
Compartilhar em outros sites

  • 0
Agora deu certinho, muito obrigado! Uma ultima dúvida eu posso colocar mais de uma trigger ligada em 1 tabela ?

Por exemplo eu tenho está trigger que atualiza o limite disponível para utilização e agora gostaria de fazer uma onde se o salário for aumentado o limite aumenta, já que o limite é calculado com base no salario.

Se você vai fazer uma atualização use o mesmo trigger que já está destinado a este fim.

Caso vá fazer inclusão e/ou exclusão pode gerar os triggers pertinentes a estas instruções.

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,2k
    • Posts
      652k
×
×
  • Criar Novo...