"Pular" um fetch do FOR/LOOP

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP

Gostaria de saber se tem algum comando que posso usar dentro um for/loop para que pulasse a execução para o próximo fetch.
Eu sei que o comando exit interrompe a execução do for/loop, eu gostaria apenas que aquele fetch fosse descartado.

Selecionar tudo

for x in 0..10
loop
   if x = 4 then
   <PULAR ESTE FETCH>
   end if;
   ...
   ...
 end loop
grato
Eduardo Gomes
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Pelo teu código (FOR), você não precisa de FETCH.
Ele é implícito.

Basta você utilizar tua condição dentro da expressão.
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP

Trevisolli talvez não tenha expressado minha dúvida certo.

O que quero saber, como que dentro de um loop eu consiga pular aquele item e ir para o próximo item do loop.
Por exemplo o loop vai de 1 a 10, dentro tem alguma programação, mas quando for 4 não é pra executar, ou seja, do 1 ao 3 faz o loop normal, no 4 pula, do 5 ao 10 faz o loop normal.

grato

eduardo
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, beleza?

Seria mais ou menos isso?

Selecionar tudo

-- Não listar 1 e 4
BEGIN
  FOR x IN 1..10
  LOOP
    IF x NOT IN (1,4)
    THEN 
      dbms_output.put_line('Valor de x:'||x);
    END IF;
  END LOOP;
END;
Se não for, manda pra gente de volta, beleza?
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

O fetch será sempre sequencial, não se pula o fetch em si, mas o processamento dentro do loop.
Pelo que entendi é isso que o Trevisolli falou ou sua query do cursor está trazendo linhas que não deveria e você tem que corrigir no SQL, o que fica bem mais intuitivo e menos com cara de "workaround".
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP

Trevisolli e fsitja

Essa soluão atende minha necessidade.

Mas por curiosidade, não existe então nenhum comando que faça isso, tipo um abort, um next, ou algo parecido???

muito obrigado pela atenção de todos.

Eduardo
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Pelo que eu saiba, a única saída é você tratar ***condicionalmente*** dentro do teu loop.

Se for um cursor explícito, por exemplo, você poderia trabalhar com %Rowcont e tals.

Qualquer coisa, manda ai.
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP

Trevisolli,
A sua dica já matou o problema aqui!!!!

A respeito do comando é por curiosidade....

Valeu pela atenção

Eduardo
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

É que não faz sentido fazer um "NEXT" num Cursor.
Tipo: vem linha por linha, dai tu testa que a linha X tu não precisa. Mas nesse momento a linha JÁ VEIO...Tu já tem ela, ou seja, já fez o fetch. Saca ?

Então, a melhor saída é mesmo colocar dentro do SQL pra não trazer o que você não precisa. OU se não for possível fazer isso, colocar o IF como o Trevisolli sugeriu.
papke
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Sex, 19 Fev 2021 3:51 pm
Localização: Canoas

usando CONTINUE para pular interacoes de impares

Selecionar tudo

BEGIN
  FOR n_index IN 1 .. 10
  LOOP
    -- skip odd numbers
    IF MOD( n_index, 2 ) = 1 THEN
      CONTINUE;
    END IF;
    DBMS_OUTPUT.PUT_LINE( n_index );
  END LOOP;
END;
The output is:

Selecionar tudo

2
4
6
8
10
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes