Had this problem before and used a procedure to return the required ammount of rows...you simply pass in the number to start at and the number to end at...
heres the code for it.. hope it helps


create or replace package LSPD_summaries as


type t_v15 is table of varchar2(15) index by binary_integer;
type t_n10 is table of number(10) index by binary_integer;
type t_v100 is table of varchar2(100) index by binary_integer;
type t_v75 is table of varchar(75) index by binary_integer;
type t_v150 is table of varchar2(150) index by binary_integer;
type t_v50 is table of varchar(50) index by binary_integer;
type t_v30 is table of varchar2(30) index by binary_integer;


procedure getSummaries( o_error_num out number,
o_rowCount out number,
i_start in number,
i_finish in number,
o_FILE_REFERENCE OUT T_V15,
o_ID OUT T_N10,
o_COUNTY OUT T_V100,
o_TYPE OUT T_V75,
o_TRANSACTION OUT T_V75,
o_THIRD_PARTY OUT T_V150,
o_LEGAL_CONTACT OUT T_V50,
o_STATUS OUT T_V30

);
end;
/
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
create or replace package body LSPD_summaries as

procedure getSummaries( o_error_num out number,
o_rowCount out number,
i_start in number,
i_finish in number,
o_FILE_REFERENCE OUT T_V15,
o_ID OUT T_N10,
o_COUNTY OUT T_V100,
o_TYPE OUT T_V75,
o_TRANSACTION OUT T_V75,
o_THIRD_PARTY OUT T_V150,
o_LEGAL_CONTACT OUT T_V50,
o_STATUS OUT T_V30

)is

v_fileRef varchar2(15);
v_id NUMBER(10);
v_county varchar2(100);
v_type varchar2(75);
v_transaction varchar2(75);
v_thirdParty varchar2(150);
v_legalContact varchar2(50);
v_status varchar2(30);
x Number :=0;

CURSOR getSummaries is

SELECT LP.FILE_REFERENCE, LP.ID, LC.COUNTY, LTYPE.TYPE, LTRAN.TRANSACTION,
LP.THIRD_PARTY, LCON.LSPD_LEGAL_CONTACT, LS.STATUS
FROM LSPD_LEGAL_PROPERTY LP, LSPD_LEGAL_COUNTY LC, LSPD_LEGAL_TYPE LTYPE,
LSPD_LEGAL_TRANSACTION LTRAN, LSPD_LEGAL_CONTACT LCON, LSPD_LEGAL_STATUS LS
WHERE LP.COUNTY_ID = LC.COUNTY_ID
AND LP.TYPE_ID = LTYPE.TYPE_ID
AND LP.TRANSACTION_ID = LTRAN.TRANSACTION_ID
AND LP.LSPD_LEGAL_CONTACT_ID = LCON.LSPD_LEGAL_CONTACT_ID
AND LP.STATUS_ID = LS.STATUS_ID (+)
AND ((LP.BF_DATE <= TRUNC(SYSDATE))
OR ((LP.STATUS_ID != 4) AND (LP.COMPLETION_DATE BETWEEN SYSDATE AND (TRUNC(SYSDATE) + 7))))
ORDER BY ((TRUNC(LP.COMPLETION_DATE)) - (TRUNC(SYSDATE))) ;

begin

open getSummaries;
FETCH getSummaries INTO v_fileRef,v_id,v_county,v_type,
v_transaction,v_thirdParty,
v_legalContact,v_status;

while (getSummaries%ROWCOUNT <= i_start ) LOOP

FETCH getSummaries INTO v_fileRef,v_id,v_county,v_type,
v_transaction,v_thirdParty,
v_legalContact,v_status;


END LOOP;


while (getSummaries%ROWCOUNT <= i_finish ) LOOP
x := x + 1;
o_FILE_REFERENCE(x) := v_fileRef;
o_ID(x) := v_id;
o_COUNTY(x) := v_county;
o_TYPE(x) := v_type;
o_TRANSACTION(x) := v_transaction;
o_THIRD_PARTY(x) := v_thirdParty;
o_LEGAL_CONTACT(x) := v_legalContact;
o_STATUS(x) := v_status;


FETCH getSummaries INTO v_fileRef,v_id,v_county,v_type,
v_transaction,v_thirdParty,
v_legalContact,v_status;

END LOOP;

while (getSummaries%FOUND) LOOP

FETCH getSummaries INTO v_fileRef,v_id,v_county,v_type,
v_transaction,v_thirdParty,
v_legalContact,v_status;

END LOOP;

o_rowCount := getSummaries%ROWCOUNT;

-- Return Success
o_error_num := 0;
End;