Oracle-10g数据库基础教程第17章基于Oracle数据库的应用开发.ppt
《Oracle-10g数据库基础教程第17章基于Oracle数据库的应用开发.ppt》由会员分享,可在线阅读,更多相关《Oracle-10g数据库基础教程第17章基于Oracle数据库的应用开发.ppt(39页珍藏版)》请在三一办公上搜索。
1、第17 基于Oracle数据库的应用开发,本章内容,利用PL/SQL程序实现分页查询 基于Oracle数据库的人事管理系统开发,本章要求,掌握利用PL/SQL程序实现分页查询 掌握利用JDBC连接数据库的方法了解基于数据库的应用系统开发过程了解人事管理系统部分核心代码的实现,17.1 利用PL/SQL实现分页查询,利用集合实现分页查询利用游标变量实现分页查询分页查询在Java开发中的应用,17.1.1 利用集合实现分页查询,如果要对特定结构的结果集进行分页查询,则可以使用集合实现。利用分页查询实现对员工工资名次、员工号、员工名、工资和部门号的查询。,CREATE OR REPLACE PACK
2、AGE 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
3、 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_INT
4、EGER:=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 v_totalPage
5、s THEN p_curPageNo:=v_totalPages;END IF;,-执行分页查询 v_startRownum:=(p_curPageNo-1)*p_pageSize+1;v_endRownum:=p_curPageNo*p_pageSize;p_outCollection:=emplist();FOR v_emp IN(SELECT*FROM(SELECT ROWNUM rn,empno,ename,sal,deptno FROM(SELECT empno,ename,sal,deptno FROM emp WHERE sal IS NOT NULL ORDER BY sal)
6、A WHERE ROWNUM=v_startRownum)LOOP p_outCollection.extend;p_outCollection(indexValue):=v_emp;indexValue:=indexValue+1;END LOOP;END sp_page;END emppkg;,通过对包中分页查询过程的调用,可以根据需要输出特定页的数据。DECLARE v_pageSize INT:=5;v_curPageNo INT:=2;v_emplist emppkg.emplist;BEGIN emppkg.sp_page(v_pageSize,v_curPageNo,v_empl
7、ist);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);END LOOP;END;,执行结果为The pagesize is:5The current page NO.is:26 7521 WARD7 7654 M
8、ARTIN8 7499 ALLEN9 2 WANG10 7782 CLARK,17.1.2 利用游标变量实现分页查询,如果要对任意查询实现分页,则可以使用游标变量来实现。,CREATE OR REPLACE PACKAGE curspkg IS TYPE refCursorType IS REF CURSOR;PROCEDURE sp_page(p_pageSize IN OUT INT,-每页输出的记录数 p_curPageNo IN OUT INT,-当前页码 p_sqlSelect VARCHAR2,-查询语句,含排序部分 p_totalPages OUT INT,-返回总页数 p_to
9、talRecords OUT INT,-返回总记录数 p_outCursor OUT refCursorType-查询返回当前页的数据);END;,CREATE OR REPLACE PACKAGE BODY CURSPKG IS PROCEDURE sp_page(p_pageSize IN OUT INT,p_curPageNo IN OUT INT,p_sqlSelect VARCHAR2,p_totalPages OUT INT,p_totalRecords OUT INT,p_outCursor OUT refCursorType)IS v_countSql VARCHAR2(100
10、0);v_startRownum INT;v_endRownum INT;v_sql VARCHAR2(4000);BEGIN v_countSql:=SELECT to_char(count(*)FROM(|p_sqlSelect|);EXECUTE IMMEDIATE v_countSql INTO p_totalRecords;,IF p_pageSize p_totalPages THEN p_curPageNo:=p_totalPages;END IF;,v_startRownum:=p_curPageNo*p_pageSize;v_endRownum:=(p_curPageNo-1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 10 数据库 基础教程 17 基于 应用 开发
链接地址:https://www.31ppt.com/p-6513336.html