LIMIT e OFFSET no Oracle


Outra coisa pentelha no Oracle, fazer paginação de registros. Não, o Oracle não tem as cláusulas LIMIT e OFFSET. Elas são utilizadas no PostgreSQL e no MySQL. O padrão SQL 2008 estabelece o uso do OFFSET e FETCH, utilizado pelo DB2, MS SQL Server e também pelo PostgreSQL. Já o Oracle… bom o Oracle só permite usar o velho rownum, que infelizmente não obedece o ORDER BY, então você é obrigado a criar uma subconsulta para paginar dados.

Vamos ver 2 métodos aqui. O primeiro é o definido pelo mago do Oracle, o Tom Kyte, do Ask Tom:

SELECT * FROM (
  SELECT a.*, ROWNUM rnum FROM (
    SELECT * FROM tabela_enorme ORDER BY campo_indexado
  ) a WHERE ROWNUM <= 61200
) WHERE rnum >= 61000;
...
...
...
Decorrido: 00:00:31.39

Agora outro método utilizando algo que eu realmente adoro, Window Functions:

SELECT * FROM (
  SELECT row_number() OVER (ORDER BY campo_indexado) linha, p.* FROM tabela_enorme
) WHERE linha BETWEEN 91000 AND 91200;
...
...
...
Decorrido: 00:00:29.34

Ou seja, utilizando Window Functions você tem uma sintaxe mais elegante e compacta e ainda ganha no desempenho. Para variar, a solução mais simples é a melhor.

Claro… eu ainda espero que alguém na Oracle tenha o bom senso de implementar o LIMIT e OFFSET, assim como uma infinidade de outras coisas que tornam a vida do desenvolvedor mais simples.

4 comentários sobre “LIMIT e OFFSET no Oracle

  1. Honestamente, não acredito que a Oracle faça algo assim. Se for para complicar, então implementam. Para ajudar… Bem, melhor pensar duas vezes…

    Curtir

  2. Amigo, muito obrigado pelo post bastante objetivo e esclarecedor. Também gostei mais da segunda alternativa e estou adotando-a.

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s