Oracle
 sql >> Database >  >> RDS >> Oracle

recuperare i dati usando rownum in Oracle

rownum è una pseudo colonna che conta le righe nel set di risultati dopo l'applicazione della clausola where.

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

0 rows selected

Tuttavia, questa query restituirà sempre zero righe, indipendentemente dal numero di righe nella tabella.

Per spiegare questo comportamento, dobbiamo capire come Oracle elabora ROWNUM. Quando si assegna ROWNUM a una riga, Oracle inizia da 1 e incrementa il valore solo quando viene selezionata una riga; cioè, quando tutte le condizioni nella clausola WHERE sono soddisfatte. Poiché la nostra condizione richiede che ROWNUM sia maggiore di 2, non viene selezionata alcuna riga e ROWNUM non viene mai incrementato oltre 1.

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

un altro link stackoverflow

Modificato

questo paragrafo lo trovo su oracle sito web che è molto meglio

Il test delle condizioni per i valori ROWNUM maggiori di un intero positivo sono sempre false. Ad esempio, questa query non restituisce righe:

SELECT * FROM employees
    WHERE ROWNUM > 1;

Alla prima riga recuperata viene assegnato un ROWNUM di 1 e rende la condizione falsa. La seconda riga da recuperare è ora la prima riga e viene anche assegnata un ROWNUM di 1 e rende la condizione falsa. Tutte le righe successivamente non soddisfano la condizione, quindi non vengono restituite righe.

Puoi anche utilizzare ROWNUM per assegnare valori univoci a ciascuna riga di una tabella, come in questo esempio: