Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucrod1

Stored Procedure

Recommended Posts

Boa tarde pessoal estou com uma duvida em uma Stored procedure vou tentar ser o mais claro possivel aqui! bom mãos a massa.

 

tenhu uma tabela enquete com as seguintes colunas codenquete,

titulo,

ativo,

datainicial,

datafinal,

iniciada,

encerrada.

 

bom preciso de uma procedure que varre esta tabela e compare o seguinte caso a dataAtual for maior ou igual que a datainicial no bd faz um update segue abaixo minha sp.

 

DELIMITER ;

 

DROP PROCEDURE IF EXISTS sp_teste;

 

DELIMITER |

 

CREATE PROCEDURE sp_teste()

BEGIN

 

DECLARE done INT DEFAULT 0;

DECLARE codEnquete INT;

DECLARE dataInicial, dataFinal DATE;

 

DECLARE curs CURSOR FOR (select codenquete, datainicial,datafinal from enquete);

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

 

OPEN curs;

 

REPEAT

 

FETCH curs INTO codEnquete, dataInicial, dataFinal;

 

IF NOT done THEN

IF dataInicial >= CURDATE() THEN

UPDATE enquete SET ativo=1 WHERE codenquete=codEnquete;

END IF;

END IF;

UNTIL done END REPEAT;

CLOSE curs;

 

end

|

 

delimiter ;

 

OBS:- A sp é criada com sucesso, sem erro mais infelizmente nao esta executando o UPDATE e lembrando existe dados na tabela para entrar no if! alguma luz ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma alternativa é ao criar o cursor, tente incluir a condição da data:

DELIMITER ;

DROP PROCEDURE IF EXISTS sp_teste;

DELIMITER |

CREATE PROCEDURE sp_teste()
BEGIN

DECLARE done INT DEFAULT 0;
DECLARE codEnquete INT;
DECLARE dataInicial, dataFinal DATE;

DECLARE curs CURSOR FOR (select codenquete, datainicial,datafinal from enquete WHERE dataInicial >= CURDATE());
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN curs;

REPEAT

FETCH curs INTO codEnquete, dataInicial, dataFinal;

IF NOT done THEN
UPDATE enquete SET ativo=1 WHERE codenquete=codEnquete;
END IF;
UNTIL done END REPEAT;
CLOSE curs;

END
|

delimiter ;

 

outra alternativa seria essa mais simples e acredito eu, mais rapida do que usar cursos:

DELIMITER ;

DROP PROCEDURE IF EXISTS sp_teste;

DELIMITER |

CREATE PROCEDURE sp_teste()
BEGIN
UPDATE enquete SET ativo=1 WHERE codenquete IN (select codenquete WHERE dataInicial >= CURDATE());
END
|

delimiter ;

 

Não testei nenhuma dessas soluções... tente testar e ver se alguma delas "da uma luz", deu certo cara ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.