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

(Resolvido) PROCEDURE MYSQL: Erro de execução


Gean de Souza

Pergunta

Bom dia pessoal,

Sou novo no pedaço e gostaria da ajuda de vocês.

Tenho um banco mysql o qual eu quero montar uma PROCEDURE que recebe uma data e exclui todos os dados que foram anteriores a data informada. Segue o conteúdo da PROCEDURE que eu criei.

DELIMITER $$

DROP PROCEDURE IF EXISTS `deleta_log` $$
CREATE DEFINER=`root`@`%` PROCEDURE `deleta_log`(IN DT INT)
BEGIN

DELETE *FROM `logs` WHERE `datetime` < 'DT';

END $$
Quando eu chamo esta procedure (inserindo a data) ela me mostra todos os valores.
CALL deleta_log ('2011-04-19 00:00:00');
Se eu executar a consulta direta, ela me mostra só o que eu quero:
CALL deleta_log ('2011-04-19 00:00:00');
Outro teste que eu fiz foi substituir a coluna, troquei para a coluna SEQ, que é usada como auto-incremento.
DELIMITER $$

DROP PROCEDURE IF EXISTS `deleta_log` $$
CREATE DEFINER=`root`@`%` PROCEDURE `deleta_log`(IN DT INT)
BEGIN

SELECT *FROM `logs` WHERE `seq` < 'DT';

END $$
Desta forma funcionou normalmente.
CALL deleta_log ('10000');

Espero que tenha sido claro! :)

Conto com ajuda de vocês.

Abraços

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Bom dia pessoal,

Sou novo no pedaço e gostaria da ajuda de vocês.

Tenho um banco mysql o qual eu quero montar uma PROCEDURE que recebe uma data e exclui todos os dados que foram anteriores a data informada. Segue o conteúdo da PROCEDURE que eu criei.

...

Oi Gean,

se você quer excluir dentro da procedure por que está usando o comando SELECT? Você deveria estar usando o comando

DELETE FROM `logs` WHERE `datetime` < 'DT';

Link para o comentário
Compartilhar em outros sites

  • 0
Você está passando o parâmetro data como int:

(IN DT INT)
Passe como datetime
IN DT datetime)
Fiz o teste como você falou, e também fiz uma outra alteração:
DELIMITER $$

DROP PROCEDURE IF EXISTS `deleta_log` $$
CREATE DEFINER=`root`@`%` PROCEDURE `deleta_log`(IN DT DATETIME) >>>>>>> COLOQUEI O DATETIME
BEGIN

SELECT *FROM `logs` WHERE `datetime` < DT; >>>>>>>>>>>>>> TIREI AS ASPAS SIMPLES DO DT

END $$

DELIMITER;

Eu já tinha feito isso (tirar as aspas) e não tinha funcionado, mas mesmo trocando o comando DATETIME (como você falou) também não tinha funcionado. Mas quando eu alterei os dois juntos, FUNCIONOU.

Muito obrigado kakao pela ajuda!!!!

Tu és :ninja:

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
      651,9k
×
×
  • Criar Novo...