- 4
- 0
- 约6.63千字
- 约 39页
- 2017-04-27 发布于四川
- 举报
Oracle_10g数据库基础教程第17章基于Oracle数据库的应用开发
第17 基于Oracle数据库的应用开发;本章内容;本章要求;17.1 利用PL/SQL实现分页查询;17.1.1 利用集合实现分页查询;CREATE OR REPLACE PACKAGE emppkg IS
--定义结果集中每条记录的类型
TYPE t_record IS RECORD(
rn INT,
empno emp.empno%TYPE,
ename emp.ename%TYPE,
sal emp.sal%TYPE,
deptno emp.deptno%TYPE);
--定义保存返回结果集的集合类型
TYPE emplist IS TABLE OF t_record;
--定义个实现分页显示的过程
PROCEDURE sp_page(
p_pageSize IN OUT INT, --每页输出的记录数
p_curPageNo IN OUT INT, --当前页码
p_outCollection OUT emplist --查询返回当前页数据的集合
);
END;;CREATE OR REPLACE PACKAGE BODY emppkg IS
PROCEDURE sp_page(
p_pageSize IN OUT INT, --每页输出的记录数
p_curPageNo IN OUT INT, --当前页码
p_outCollection OUT emplist) --查询返回当前页数据的集合
AS
v_startRownum NUMBER;
v_endRownum NUMBER;
v_totalRecords NUMBER;
v_totalPages NUMBER;
indexValue BINARY_INTEGER :=1;
BEGIN
--查询记录总数
SELECT count(*) INTO v_totalRecords FROM emp;
--验证页面记录数量
IF p_pageSize 0 THEN
p_pageSize := 10;
END IF;
; --计算总页数
IF MOD(v_totalRecords,p_pageSize)=0 THEN
v_totalPages:=v_totalRecords/p_pageSize;
ELSE
v_totalPages:=floor(v_totalRecords/p_pageSize)+1;
END IF;
--验证页号
IF p_curPageNo 1 THEN
p_curPageNo := 1;
END IF;
IF p_curPageNov_totalPages THEN
p_curPageNo :=v_totalPages;
END IF;;;通过对包中分页查询过程的调用,可以根据需要输出特定页的数据。
DECLARE
v_pageSize INT :=5;
v_curPageNo INT:=2;
v_emplist emppkg.emplist;
BEGIN
emppkg.sp_page(v_pageSize,v_curPageNo,v_emplist);
DBMS_OUTPUT.PUT_LINE(The pagesize is :||v_pageSize);
DBMS_OUTPUT.PUT_LINE(The current page NO. is :||
v_curPageNo);
FOR i IN 1..v_emplist.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(v_emplist(i).rn|| ||
v_emplist(i).empno|| ||
v_emplist(i).ename);
E
原创力文档

文档评论(0)