Paginazione dei risultati in DB2
|
Come paginare i risultati di una query in db2 quando non sia possibile usare cursori pare essere una domanda diffusa. Supponendo di avere la seguente tabella: create table mytable( id integer, field1 varchar(32), field2 varchar(32) );
e posto che id sia una "sequence", potremmo semplicemente fare così: select * from mytable where id > 5 and id < 15
per estrarre 10 righe a partire dalla quinta. Semplice, ma utile solo nel caso in cui non abbiamo clausole where o order by; nel primo caso (clausola "where") potrebbero mancare delle righe(filtrate), per cui non si avrebbe il numero di righe desiderato; nel secondo, la clausola order by mischierebbe la progressione di id, rendendola inutilizzabile. Ma in db2 possiamo utilizzare rownumber() over(). Immaginiamo di voler estrarre 10 righe a partire dalla quinta, ordinate per field2 ascendente, la nostra istruzione sql sarà qualcosa del genere: select temp.* from ( select rownumber() over(order by field2 asc) as nr,id,field1,field2 from mytable ) as temp where nr between 5 and 15
Basta cambiare i valori della clausola between per paginare i risultati della query.
|