Meu repeat busca apenas a primeira linha do select !

18/04/2017

0

Bom dia , estou usando um repeat para inserir em uma tabela pegando dados de outra, porém quando eu faço o select para buscar esses dados ele so pega o primeiro registro sendo que eu tenho 3, oque pode ser ?
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" ;
	  --aqui ele faz um primeiro select onde lista 6 tipos de risco porém da o erro no ultimo tipo de risco.

      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;
		  --aqui ele busca os exames de acordo com o tipo de risco , o erro só aparece quando ele busca os exames com o ultimo tipo de risco gravdo na tabela onde ele possui 3 exames e meu repeat para no primeiro

		  SET DONE10:=0;
          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