Like others, you can use rownum in Oracle. This is a bit complicated and you need to double enclose your request.
For example, to split a query
select first_name from some_table order by first_name
you need to put it like this
select first_name from (select rownum as rn, first_name from (select first_name from some_table order by first_name) ) where rn > 100 and rn <= 200
The reason for this is that rownum is defined after the where clause and before the order by clause. To find out what I mean, you can request
select rownum,first_name from some_table order by first_name
and you can get
4 Diane 2 Norm 3 Sam 1 Woody
This is because oracle evaluates the where clause (in this case there is nobody), then assigns rownums, and then sorts the results by first_name. You must nest the query so that it uses the rownum assigned after sorting the rows.
The second nesting is related to how rownum is handled in that place. Basically, if you request "where rownum> 100", then you will not get any results. This is a chicken and an egg where he cannot return a single row until he finds rownum> 100, but since he does not return a single row, he never increases rownum, so he never counts to 100. Ugh. The second level of nesting solves this. Note that at this point it should be an alias of the rownum column.
Finally, the order by clause should make the request deterministic. For example, if you have John Doe and John Smith, and you order only by name, then they can switch places from one query to the next.
There are articles here http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html and here http://www.oracle.com/technology/oramag/oracle/07-jan/o17asktom. html Now that I see how long my post has been, I probably should have just posted these links ...