Pular para o conteúdo
Visualizando 15 posts - 1 até 15 (de 17 do total)
  • Autor
    Posts
  • #83703
    Anônimo

      Pessoal, estou fazendo um LOOP exatamente assim, e gostaria de saber se eu coloco o <> neste lugar para eu forçar a saída lá em baio.

      OPEN c_lancamento;
      FETCH c_lancamento BULK COLLECT INTO v_lancamento LIMIT 500;
      <>
      FOR indx IN 1.. v_lancamento.COUNT LOOP
      BEGIN
      .
      .
      .
      .
      exit <
      >

      #83706
      Avatar photoLeonardo Litz
      Participante

        Cleber… este <> esta dentro do loop ou dentro do fetch?

        #83707
        Anônimo

          está exatamente dessa forma que eu coloquei e não se se está no lugar correto;

          #83708
          Avatar photoLeonardo Litz
          Participante

            Cleber, passe o código até o close do fetch….

            #83710
            Anônimo

              OPEN c_lancamento;
              FETCH c_lancamento BULK COLLECT INTO v_lancamento LIMIT 500;
              <>
              FOR indx IN 1.. v_lancamento.COUNT LOOP
              BEGIN
              .
              .
              .
              OPEN c_item(to_number(v_lancamento(indx).CLCT_NUM_LAN_SAP));
              FETCH c_item BULK COLLECT INTO v_item LIMIT 500;
              <>
              FOR indx IN 1.. v_item.COUNT LOOP
              BEGIN
              .
              .
              IF c_item%NOTFOUND THEN
              EXIT C_1; –sai do primeiro loop direto!
              END IF;

                              END;
                              END LOOP; -- END LOOP DE ITENS
                              CLOSE c_item;
                              COMMIT;
              

              END LOOP; — end loop de lançamentos
              CLOSE c_lancamento;
              COMMIT;

              #83713
              Avatar photoLeonardo Litz
              Participante

                Cara, ai ele não vai sair do primeiro loop não… oque vc pode fazer
                é colocar este bloco nomeado fora do primeiro loop, lá no final, e dar um goto para ele, só que vc saindo desse loop principal, não esqueca de fechar os cursores que estão aberto

                faca algo do tipo
                IF c_item%NOTFOUND THEN

                CLOSE c_lancamento;
                CLOSE c_item;
                GOTO C_1; –sai do primeiro loop direto!

                END IF;

                Valeu

                #83714
                Anônimo

                  o GOTO ele vai voltar ao início no primeiro loop. e eu preciso do segundo loop dentro do primeiro.

                  #83715
                  Avatar photoLeonardo Litz
                  Participante

                    Coloca esse <> por ultimo depois do comit e tire o que esta em cima.

                    #83716
                    Anônimo

                      e no lugar do exit eu coloco GOTO?

                      ficando assim: GOTO <>

                      #83717
                      Avatar photoLeonardo Litz
                      Participante

                        Põe assim

                        IF c_item%NOTFOUND THEN

                        CLOSE c_lancamento;
                        CLOSE c_item;
                        GOTO C_1; –sai do primeiro loop direto!

                        END IF;

                        #83718
                        Anônimo

                          e o programa segue, né?

                          #83719
                          Avatar photoLeonardo Litz
                          Participante

                            Isso, mas coloque no fim (depois do commit) o bloco <>

                            #83720
                            Anônimo

                              cara, me dá uma luz aí numa coisa banal.

                              eu fiz um loop e fui inserindo em uma tabela, derrepente deu um erro qualquer e preciso deletar esses registros que foram inserido. não posso fazer rollback, apesar de que não dei o commit ainda neste momento.

                              tem uma idéia aí?

                              #83721
                              Avatar photoLeonardo Litz
                              Participante

                                Seguinte, se vc não deu commit, não precisa deletar os registros pois eles não foram inseridos.
                                Os erros do oracle contem rollback implicito, ou seja quando ocorre um erro ele ja faz rollback.

                                Nesse seu programa aconselharia vc colocar o commit por ultimo de tudo.

                                Assim vc garante que se o processo for executado todo belezinha ele estara ok.

                                Isso é um conceito chamado atomicidade…

                                Vlw Leonardo Litz

                                #83722
                                Anônimo

                                  bem lembrado meu camarada, valeu mesmo!
                                  outra coisa, em um outro processo aqui eu commito a cada 10000 registros inseridos, se derrepente dá um erro qualquer quando ele estiver inserindo 1000 registro então eu perco esses 1000 registros? como fazer para eu nao perder esses 1000 registros?

                                Visualizando 15 posts - 1 até 15 (de 17 do total)
                                • Você deve fazer login para responder a este tópico.