Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Selecionando a segunda linha de uma tabela usando rownum


Para explicar esse comportamento, precisamos entender como o Oracle processa ROWNUM. Ao atribuir ROWNUM a uma linha, o Oracle inicia em 1 e só incrementa o valor quando uma linha é selecionada; isto é, quando todas as condições da cláusula WHERE são atendidas. Como nossa condição exige que ROWNUM seja maior que 2, nenhuma linha é selecionada e ROWNUM nunca é incrementado além de 1.

A linha inferior é que condições como as seguintes funcionarão conforme o esperado.

.. WHERE rownum =1;

.. WHERE rownum <=10;

Enquanto as consultas com essas condições sempre retornarão zero linhas.

.. WHERE rownum =2;

.. WHERE rownum> 10;

Citado em Entendendo o Oracle rownum

Você deve modificar sua consulta desta forma para funcionar:
select empno
from
    (
    select empno, rownum as rn 
    from (
          select empno
          from emp
          order by sal desc
          )
    )
where rn=2;

EDITAR :corrigi a consulta para obter o rownum depois o pedido por sal desc