Quando preciso paginar uma consulta usando apenas recursos do Oracle, independente da tecnologia usada na aplicação, eu faço usando a seguinte técnica.

 

SELECT ROWNUM + (25 * (PAGINA - 1)) AS "ROWNUM"
      ,B.*
  FROM (SELECT COUNT(*) OVER() AS TOTALREG
              ,TRUNC((ROW_NUMBER() OVER(ORDER BY DUMMY) - 1) / 25) + 1 AS PAGINA
              ,TMP.*
          FROM (SELECT * FROM DUAL) TMP

       ) B
  WHERE PAGINA = 1

Onde a consulta em azul é substituída pela consulta principalmente desejada. a ordenação em laranja é substituída pela ordenação apropriada, o número da página em verde deve ser substituído pela página a ser listada e os números de registros por página em vermelho devem ser substituídos pelo tamanho da paginação.

Apesar de aparentemente complexa, essa consulta é bem leve para o Oracle, retornando apenas o trecho interessante para a aplicação.

Qual técnica de paginação vocês utilizam no Oracle?

Exibições: 1381

© 2018   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço