Minha procedure busca apenas um registro da tabela. MYSQL FETCH REPEAT
17/04/2017
0
Bom dia , estou usando um repeat para percorrer todos os registros da minha tabela porém ele busca só o primeiro e finaliza.
BEGIN-- INICIO DA ESTRUTURA QUE FILTRA OS EXAMES VINCULADOS AO RISCO DO SETOR DECLARE DONE9 INT DEFAULT 0; DECLARE CUR9 CURSOR FOR SELECT R.ID_RISCO FROM RISCO_SETOR_EMP R WHERE R.ID_SET_EMP=CODIGO_SETOR AND R.CODCVN=COD_EMPRESA AND ATIVO="S" ; DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE9=1; SET DONE9:=0; OPEN CUR9; FETCH CUR9 INTO CODIGO_RISCO; REPEAT BEGIN -- EXAMES VINCULADOS AOS RISCOS DO SETOR DECLARE DONE10 INT DEFAULT 0; DECLARE CUR10 CURSOR FOR SELECT E.CODEXAME FROM EXAME_RISCO E WHERE CODRISCO=CODIGO_RISCO AND E.ATIVO="S"; DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE10=1; --ELE BUSCA APENAS UM REGISTRO DESSA TABELA SENDO QUE TENHO 3 REGISTROS OPEN CUR10; REPEAT FETCH CUR10 INTO CODIGO_EXAME_VINCULADO_RISCO; SET WDATA_PROXIMO:=NULL; SET DATA_PROXIMO_EXAME:=NULL; IF CODIGO_EXAME_VINCULADO_RISCO IS NOT NULL THEN SELECT COUNT(*) FROM PCMSO_EXA_CLI P INNER JOIN EXAME_COMPL E ON(P.ID_EXAME=E.ID_EXAME) INNER JOIN TABGERALCOD T ON(P.TIPO_EXAME=T.CODIGO AND T.CODTAB=31 AND T.DESCRICAO<>'Demissional') WHERE E.CODCLI=CODIGO_FUNCIONARIO AND E.COD_EXAME=CODIGO_EXAME_VINCULADO_RISCO ORDER BY E.DTAPROXEXA DESC LIMIT 0,1 INTO TROUXE_REGISTRO; SET WDATA_PROXIMO:=DATA_ADMISSAO; IF TROUXE_REGISTRO>0 THEN SELECT E.DTAPROXEXA FROM PCMSO_EXA_CLI P INNER JOIN EXAME_COMPL E ON(P.ID_EXAME=E.ID_EXAME) INNER JOIN TABGERALCOD T ON(P.TIPO_EXAME=T.CODIGO AND T.CODTAB=31 AND T.DESCRICAO<>'Demissional') WHERE E.CODCLI=CODIGO_FUNCIONARIO AND E.COD_EXAME=CODIGO_EXAME_VINCULADO_RISCO ORDER BY E.DTAPROXEXA DESC LIMIT 0,1 INTO DATA_PROXIMO_EXAME; SET WDATA_PROXIMO:=DATA_PROXIMO_EXAME; END IF; IF ((DATA_PROXIMO_EXAME IS NULL)AND(TROUXE_REGISTRO<=0)) THEN SELECT COUNT(*) FROM EXAMES_TMP T WHERE T.CODCONCO=CODIGO_FUNCIONARIO AND T.CODCVN=COD_EMPRESA AND T.ID_EXAME=CODIGO_EXAME_VINCULADO_RISCO INTO TROUXE_REGISTRO; IF TROUXE_REGISTRO<=0 THEN INSERT INTO EXAMES_TMP(CODCONCO,ID_EXAME,CODCVN,DTAPROXEXA) VALUES(CODIGO_FUNCIONARIO,CODIGO_EXAME_VINCULADO_RISCO,COD_EMPRESA,F_DTAPROXEXA_ADM(CODIGO_FUNCIONARIO,CODIGO_FUNCAO,CODIGO_EXAME_EMPRESA,COD_EMPRESA,WDATA_PROXIMO)); END IF; ELSE SELECT COUNT(*) FROM EXAMES_TMP T WHERE T.CODCONCO=CODIGO_FUNCIONARIO AND T.CODCVN=COD_EMPRESA AND T.ID_EXAME=CODIGO_EXAME_VINCULADO_RISCO INTO TROUXE_REGISTRO; IF TROUXE_REGISTRO<=0 THEN INSERT INTO EXAMES_TMP(CODCONCO,ID_EXAME,CODCVN,DTAPROXEXA) VALUES(CODIGO_FUNCIONARIO,CODIGO_EXAME_VINCULADO_RISCO,COD_EMPRESA,WDATA_PROXIMO); END IF; END IF;-- FIM DO IF ELSE END IF;-- FIM DO IF CODIGO_EXAME_VINCULADO_RISCO SET CODIGO_EXAME_VINCULADO_RISCO:=NULL; SET DATA_PROXIMO_EXAME:=NULL; FETCH CUR10 INTO CODIGO_EXAME_VINCULADO_RISCO; UNTIL DONE10 END REPEAT; CLOSE CUR10; SET CODIGO_EXAME_VINCULADO_RISCO:=NULL; SET DATA_PROXIMO_EXAME:=NULL; END; SET CODIGO_RISCO:=NULL; FETCH CUR9 INTO CODIGO_RISCO; UNTIL DONE9 END REPEAT; CLOSE CUR9; SET CODIGO_RISCO:=NULL; END;-- FIM DA ESTRUTURA QUE FILTRA OS EXAMES VINCULADOS AO RISCO DO SETOR
Rodrigo Oliveira
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)