just a
word of warning about scrollable resultsets: Besides tying up valuable database resources longer than needed, they are cached as you iterate through them. A common misconception is that when you start iterating in reverse that the previous rows are refetched from the database. What really happens is that as you iterate forwards through the resultset, they will get stored in memory. Depending on the number of columns and the size of each column, 20 000 rows could eat a lot of memory.
My answer to this question is typically, when was the last time you scrolled through 20 000 results? I don't think I've ever made it past 100th entry ( or the 10th page ) on any search engine/pagination web page never mind the 2 000th page!!
Jamie