dúvidas trigger sql

03/06/2017

0

Olá estou fazendo um projeto na faculdade e estou com dificuldade em um código sql
é o seguinte: quero criar uma trigger , onde antes de inserir os dados ele verifique se a quantidade de dados que já estão inseridos está igual ou mais que 20,
se estiver ele limpará todos esse dados e vai inserir este novo normalmente, e caso nao esteja vai inserir o dado normalmente;

eu também queria usar o TRUNCATE, mas parece que nao pode usar na trigger, se tiverem uma solução pra isso eu também agradeço, porque assim
limparia todos os registro e deixaria a tabela limpa, e realmente isso que eu queria, aí depois teria a inserção dos dados novos até ter 20 na tabela;

o código que fiz foi esse :
DELIMITER $

CREATE TRIGGER INSERIR_DADOS BEFORE INSERT
ON PLAY1_VS_PLAY2
FOR EACH ROW

IF ((SELECT COUNT(ID) FROM PLAY1_VS_PLAY2) >=20 ) THEN
BEGIN
DELETE FROM PLAY1_VS_PLAY2 WHERE ID < NEW.ID;
END;
END IF$
DELIMITER ;

o erro que ocorre é esse: Code: 1442. Can't update table 'play1_vs_play2' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

a tabela que quero manipular é esta:
TABELA : PLAY1_VS_PLAY2
COLUNAS: ID, NOME, VITORIAS, DERROTAS, EMPATES.

se puderem me ajudar, agradeço;
Samuel Sousa

Samuel Sousa

Responder

Post mais votado

03/06/2017

Você não pode excluir os dados na trigger na mesma tabela que ela é aciona, pois isso causa um efeito de loop. O correto é você fazer criar uma procedure que receba esses dados de inserção e na procedure você faça a validação.

Fabio Parreira

Fabio Parreira
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar