Pages

Friday, July 11, 2008

Paginazione in Oracle

A differenza di database come MySQL, in oracle la paginazione dei dati non è così elementare..
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.