Warning: Cannot modify header information - headers already sent by (output started at /var/www/lalieno.it/index.php:48) in /var/www/lalieno.it/inc/cookie.php on line 3
a cadenza discontinua
Come se fossi
BLOG

Oracle LIMIT di una query con ROWNUM e ORDER

L'uso della LIMIT in ORACLE è paragonato all'uso della ROWNUM, cosa non del tutto corretta in determinati casi sopratutto nell'utilizzo della ORDER.

La ROWNUM èuna PSEUDOCOLONNA che indica come oracle ha selezionato le righe dalla tabella.

Aggiungendo un ORDER BY, dato che la ROWNUM è presente nella WHERE, se l'ordine di prelevamento non è uguale a quello di ordinameto si avrà una situazione non veritiera.

Esempio:

SELECT rownum, id, nome FROM table WHERE ROWNUM < 4 ORDER BY nome

Si potrebbe ottenere un result sballato:

rownum id nome
2 1 Guido
1 3 Luca
3 4 Mirco
4 2 Peppe

Questo è causato dalla ORDER BY dato che l'ordinamento viene eseguito prima della ORDER BY.

Per ovviare è necessario utilizzare una doppia SELECT che ci garantisce il risultato:

SELECT * FROM (SELECT * table ORDER BY nome )  WHERE ROWNUM < 4

rownum id nome
1 1 Guido
2 3 Luca
3 4 Mirco
4 2 Peppe

di GuiZ
29/11/2013

Commenta

We'll never share your email with anyone else.