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 |