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
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 :