Esiste un campo interno ROWNUM che in effetti numera le righe del risultato di una query.
Il problema però è che la numerazione inizia dopo l'invocazione di rownum, non prima, ergo un'espressione come:
select * from ourTable where rownum>2;
non può funzionare, perchè la prima riga (rownum=1) non verrà mai visualizzata, e di conseguenza rownum non verrà mai incrementato.
La soluzione è effettuare tre nested query: la prima con la query alla tabella da noi desiderata, la seconda che limita la finestra all'offset superiore della paginazione, la terza che forza il limite inferiore, trattando rownum come una normale colonna di una tabella.
Ecco come:
select * from
(select ourTable.*, rownum rowN from
(select * from ourTable
where ourCondition=true
order by ourColumn)
where rownum <= maxPageOffset)
where rowN >= minPageOffset;
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.