Oracle
 sql >> Base de données >  >> RDS >> Oracle

récupérer des données à l'aide de rownum dans oracle

rownum est une pseudo-colonne qui compte les lignes dans le jeu de résultats après l'application de la clause where.

  SELECT table_name
    FROM user_tables
    WHERE rownum > 2;
TABLE_NAME                     
------------------------------

0 rows selected

Cependant, cette requête renverra toujours zéro ligne, quel que soit le nombre de lignes dans la table.

Pour expliquer ce comportement, nous devons comprendre comment Oracle traite ROWNUM. Lors de l'affectation de ROWNUM à une ligne, Oracle commence à 1 et n'incrémente la valeur que lorsqu'une ligne est sélectionnée ; c'est-à-dire lorsque toutes les conditions de la clause WHERE sont remplies. Étant donné que notre condition exige que ROWNUM soit supérieur à 2, aucune ligne n'est sélectionnée et ROWNUM n'est jamais incrémenté au-delà de 1.

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

un autre lien stackoverflow

Modifié

ce paragraphe que je trouve sur oracle site qui est bien meilleur

Les conditions testant les valeurs ROWNUM supérieures à un entier positif sont toujours fausses. Par exemple, cette requête ne renvoie aucune ligne :

SELECT * FROM employees
    WHERE ROWNUM > 1;

La première ligne extraite se voit attribuer un ROWNUM de 1 et rend la condition fausse. La deuxième ligne à extraire est maintenant la première ligne et se voit également attribuer un ROWNUM de 1 et rend la condition fausse. Toutes les lignes échouent par la suite à satisfaire la condition, donc aucune ligne n'est renvoyée.

Vous pouvez également utiliser ROWNUM pour attribuer des valeurs uniques à chaque ligne d'un tableau, comme dans cet exemple :