Dans une base de données Oracle, quelle est la différence entre ROWNUM et ROW_NUMBER?

StackOverflow https://stackoverflow.com/questions/174595

  •  05-07-2019
  •  | 
  •  

Question

Quelle est la différence entre ROWNUM et ROW_NUMBER?

Était-ce utile?

La solution

ROWNUM est une & "pseudocolonne &"; qui attribue un numéro à chaque ligne renvoyée par une requête:

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 est une fonction analytique qui attribue un numéro à chaque ligne en fonction de son classement dans un groupe de lignes:

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

Autres conseils

En quelques lectures, ROWNUM est une valeur automatiquement attribuée par Oracle à un ensemble de lignes (avant l'évaluation de ORDER BY, il ne faut donc pas jamais ORDER BY ROWNUM ni utiliser un WHERE ROWNUM < 10 avec ORDER BY).

ROW_NUMBER () apparaît pour est une fonction permettant d'affecter des numéros de ligne à un jeu de résultats renvoyé par une sous-requête ou une partition.

Hormis les autres différences mentionnées dans les réponses, vous devez également prendre en compte les performances. Il s'agit ici d'un rapport peu intéressant mais très intéressant, comparant différents moyens de pagination, parmi lesquels l'utilisation de ROWNUM par rapport à ROW_NUMBER() OVER():

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

rownum est une pseudo-colonne qui peut être ajoutée à toute sélection query, pour numéroter les lignes retournées (en commençant par 1). Ils sont classés en fonction du moment où ils ont été identifiés comme faisant partie du jeu de résultats final. ( #ref )

row_number est une fonction d'analyse qui peut être utilisé pour numéroter les lignes renvoyées par la requête dans un ordre imposé par la fonction row_number ().

Rownum commence par 1 .. augmente après que la condition a évalué les résultats à vrais. Par conséquent, rownum & Gt; = 1 renvoie toutes les lignes du tableau

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top