Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #94814
    binhobiork
    Participante

      Oi. Gostaria de saber se é possivel realizar um count dentro da estrutura abaixo:

      BEGIN
      FOR detalhe IN select * from cliente
      LOOP

      –Aqui é possivel saber quantas linhas a variavel “detalhe” retornou aqui dentro?
      –Um cursor tem o detalhe.COUNT, mas nesta estrutura não consegui usar o COUNT.

      END LOOP;
      END;

      Eu sei que eu poderia usar o select para retornar o count, mas esse foi só um exemplo. Na verdade o select que estou usando é muito grande e contem varios UNION.

      Obrigado

      #94815
      burga
      Participante

        Tem um jeito e eu não sei se é o melhor, mas na cláusula SELECT do FOR você pode colocar “count(*) over ()”.

        BEGIN
        FOR detalhe IN (select coluna1, coluna2, count(*) over() total from cliente)
        LOOP

        — ao invés do detalhe.COUNT você usa o detalhe.total

        END LOOP;
        END;

        #94816
        fsitja
        Participante

          [quote=”binhobiork”:dru61ugp]
          Eu sei que eu poderia usar o select para retornar o count, mas esse foi só um exemplo. Na verdade o select que estou usando é muito grande e contem varios UNION.[/quote]

          O uso de cursor for loop tem alguns anos que já está obsoleto no Oracle, desde o lançamento da versão 9i, por ser extremamente lento e ineficiente. Combine isso com um select que potencialmente usa um plano de acesso não otimizado (com vários Unions) e há razão para acreditar que o desempenho do procedimento seja muito mais lento do que deveria ser.

          Tente substituir o cursor loop por uso de bulk collect ou mesmo eliminar o cursor com um comando só (update/insert/delete) com a sua operação numa vez só.

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