lucrod1 0 Denunciar post Postado Maio 31, 2011 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
ChuckyBrazil 0 Denunciar post Postado Maio 31, 2011 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