Pergunta

Qual é a diferença entre ROWNUM e ROW_NUMBER ?

Foi útil?

Solução

Rownum é uma "pseudocolumn" que atribui um número a cada linha retornada por uma consulta:

SQL> select rownum, ename, deptno
  2  from emp;

    ROWNUM ENAME          DEPTNO
---------- ---------- ----------
         1 SMITH              99
         2 ALLEN              30
         3 WARD               30
         4 JONES              20
         5 MARTIN             30
         6 BLAKE              30
         7 CLARK              10
         8 SCOTT              20
         9 KING               10
        10 TURNER             30
        11 FORD               20
        12 MILLER             10

Row_Number é uma função analítica que atribui um número a cada linha de acordo com sua ordem em um grupo de linhas:

SQL> select ename, deptno, row_number() over (partition by deptno order by ename) rn
  2  from emp;

ENAME          DEPTNO         RN
---------- ---------- ----------
CLARK              10          1
KING               10          2
MILLER             10          3
FORD               20          1
JONES              20          2
SCOTT              20          3
ALLEN              30          1
BLAKE              30          2
MARTIN             30          3
TURNER             30          4
WARD               30          5
SMITH              99          1

Outras dicas

De uma pequena leitura, Rownum é um valor automaticamente atribuído pela Oracle a um lixo (antes da ordem, sendo avaliado, então não sempre ORDER BY ROWNUM ou use um WHERE ROWNUM < 10 com um ORDER BY).

Row_number () parece ser uma função para atribuir números de linha a um conjunto de resultados retornados por uma subconsulta ou partição.

Além das outras diferenças mencionadas nas respostas, você também deve considerar o desempenho. Há um relatório não autoritativo, mas muito interessante aqui, comparando vários meios de paginação, entre os quais o uso de ROWNUM comparado com ROW_NUMBER() OVER():

http://www.inf.unideb.hu/~gabora/pagination/results.html

ROWNUM é uma pseudocolumn que pode ser adicionada a qualquer consulta selecionada, para numerar as linhas retornadas (começando com 1). Eles são ordenados de acordo com quando foram identificados como parte do conjunto de resultados finais. (#ref)

row_number é uma função de analítica, que pode ser usada para numerar as linhas retornadas pela consulta em um pedido obrigatório pela função row_number ().

O ROWNUM começa com 1 .. Aumentes após a condição avaliaram os resultados para verdadeiros. Portanto, rownum> = 1 retorna todas as linhas na tabela

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top