rownum е псевдо колона, която брои редовете в резултатния набор след прилагане на клаузата where.
SELECT table_name
FROM user_tables
WHERE rownum > 2;
TABLE_NAME
------------------------------
0 rows selected
Тази заявка обаче винаги ще връща нула редове, независимо от броя на редовете в таблицата.
За да обясним това поведение, трябва да разберем как Oracle обработва ROWNUM. Когато присвоява ROWNUM на ред, Oracle започва от 1 и увеличава стойността само когато е избран ред; когато са изпълнени всички условия в клаузата WHERE. Тъй като нашето условие изисква ROWNUM да е по-голямо от 2, не се избират редове и ROWNUM никога не се увеличава над 1.
http://blog.lishman.com/2008/03/rownum.html
друга връзка към stackoverflow
Редактирано
този параграф намирам в oracle уебсайт, който е много по-добър
Тестване на условия за стойности ROWNUM, по-големи от положително цяло число, винаги са неверни. Например тази заявка не връща нито един ред:
SELECT * FROM employees
WHERE ROWNUM > 1;
На първия извлечен ред се присвоява ROWNUM от 1 и прави условието невярно. Вторият ред, който трябва да бъде извлечен, вече е първият ред и също му е присвоен ROWNUM от 1 и прави условието невярно. Всички редове впоследствие не успяват да задоволят условието, така че не се връщат редове.
Можете също да използвате ROWNUM, за да присвоите уникални стойности на всеки ред от таблица, както в този пример: