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;
é 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
Curtir tópico
+ 0
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
Responder
Clique aqui para fazer login e interagir na Comunidade :)