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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)