LOOP IN PROCEDURE

XXXANGELSXXX 05/09/2010 01:05:26
#352259
Boa Noite amigos, eu aqui de novo, nem sanei uma duvida ja estou na proxima, amigos, estou precisando fazer um loop na procedure, para que execute a funçao de dar o update em uma determinada informacao em todos os clientes do banco.. estou postando a procedure.. se alguem puder ajudar..


  
DELIMITER $$
DROP PROCEDURE IF EXISTS 'pr_calcula_totaldocontrato_comissao' $$
CREATE DEFINER='root'@'localhost' PROCEDURE 'pr_calcula_totaldocontrato_comissao'(
IN var_mes VARCHAR(2),
var_ano VARCHAR(4)
)
BEGIN
UPDATE
apurcomissaocat
SET vlcontrato=(SELECT SUM(b.prodservvalorcct)
FROM produtoseservicosporcliente AS b WHERE b.prodservcliente = apurcomissaocat.pesscodigo)
AND (apurcomissaocat.mescomissao = var_mes) and (apurcomissaocat.anocomissao=var_ano);
END $$
DELIMITER ;



XXXANGELSXXX 05/09/2010 12:21:05
#352277
Resolvido, para quem precisar algum dia.. lembrando.. banco de dados mysql.

 
DELIMITER $$
DROP PROCEDURE IF EXISTS 'pr_calcula_totaldocontrato_comissao' $$
CREATE DEFINER='root'@'localhost' PROCEDURE 'pr_calcula_totaldocontrato_comissao'(
IN var_mes VARCHAR(2),
IN var_ano VARCHAR(4)
)
BEGIN
-- variaveis que serao utilizadas
DECLARE existe_mais_linhas INT DEFAULT 0;
DECLARE var_dat DOUBLE;

-- Definição do cursor
DECLARE varreTabela CURSOR FOR SELECT SUM(prodservvalorcct)FROM produtoseservicosporcliente
INNER JOIN apurcomissaocat ON produtoseservicosporcliente.prodservcliente=apurcomissaocat.pesscodigo
WHERE ((produtoseservicosporcliente.prodservcliente = apurcomissaocat.pesscodigo))
AND (apurcomissaocat.mescomissao = var_mes) OR (apurcomissaocat.anocomissao=var_ano);

-- Definição da variável de controle de looping do cursor
DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;

-- Abertura do cursor
OPEN varreTabela;

-- Looping de execução do cursor
meuLoop: LOOP
FETCH varreTabela INTO var_dat;

-- Controle de existir mais registros na tabela
IF existe_mais_linhas = 1 THEN
LEAVE meuLoop;
END IF;
-- Update na tabela apuracao de comissao
UPDATE apurcomissaocat SET vlcontrato = var_dat;

-- Retorna para a primeira linha do loop
END LOOP meuLoop;

end $$

DELIMITER ;
Tópico encerrado , respostas não são mais permitidas