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

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

Aceitar