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

buscando dados usando rownum no oracle


rownum é uma pseudo coluna que conta linhas no conjunto de resultados após a aplicação da cláusula where.
  SELECT table_name
    FROM user_tables
    WHERE rownum > 2;
TABLE_NAME                     
------------------------------

0 rows selected

No entanto, essa consulta sempre retornará zero linhas, independentemente do número de linhas na tabela.

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

http://blog.lishman.com/2008/03/rownum.html

outro link stackoverflow

Editado

este parágrafo eu encontro no oracle site que é muito melhor

As condições de teste para valores ROWNUM maiores que um número inteiro positivo são sempre falsas. Por exemplo, esta consulta não retorna nenhuma linha:
SELECT * FROM employees
    WHERE ROWNUM > 1;

A primeira linha buscada recebe um ROWNUM de 1 e torna a condição falsa. A segunda linha a ser buscada agora é a primeira linha e também recebe um ROWNUM de 1 e torna a condição falsa. Todas as linhas subsequentemente falham em satisfazer a condição, portanto, nenhuma linha é retornada.

Você também pode usar ROWNUM para atribuir valores exclusivos a cada linha de uma tabela, como neste exemplo: