Добавьте размер страницы и номер страницы к вашей процедуре.
Добавьте нумерацию строк по вашему запросу, а затем верните записи, в которых номер строки> ((размер страницы - 1) * номер страницы + 1) и номер строки <= (размер страницы * номер страницы) </p>
Если вам нужен ответ более низкого уровня, я могу перевести его в соответствующий код.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Мой синтаксис Oracle может быть ужасным. Обратитесь к Oracle ROW_NUMBER описанию (самый последний пример) о том, как я пытался построить это.
// процедура
PROCEDURE get_namelist
(
return_code_out OUT VARCHAR2,
return_msg_out OUT VARCHAR2,
id_no_in IN employee.id_no%TYPE,
page_num IN (int datatype),
page_size IN (int datatype),
name_out OUT employee.name%TYPE,
addr_out OUT employee.addr%TYPE,
)
IS
BEGIN
return_code_out := '0000';
return_msg_out := 'OK';
SELECT i.name, i.addr INTO name_out, addr_out,
FROM
(SELECT e.name, e.addr,
ROW_NUMBER() OVER (ORDER BY e.name) as row
FROM employee e
WHERE e.id_no = id_no_in) i
WHERE row between ((page_num - 1) * page_size) AND (page_num * page_size);
END get_namelist;
// ява
DbUtil db = null;
java.sql.CallableStatement cstmt = null;
db = new DbUtil();
cstmt = db.prepareCall("{ call jack.PACK_EMPLOYEE.get_namelist(?, ?, ?, ?, ?, ?, ?) }");
cstmt.registerOutParameter(1,OracleTypes.VARCHAR);
cstmt.registerOutParameter(2,OracleTypes.VARCHAR);
cstmt.setString(3,this.getIdNo());
cstmt.setString(4,pagenum);
cstmt.setString(5,pagesize);
cstmt.registerOutParameter(6,OracleTypes.VARCHAR);
cstmt.registerOutParameter(7,OracleTypes.VARCHAR);
stmt.execute();
this.setName(cstmt.getString(4));
this.setAddress(cstmt.getString(5));
Вы вызываете процедуру через Java с другим страницей, когда вам требуется страница, отличная от отображаемой.