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

Rodrigo Oliveira

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar