Oracle-10g数据库基础教程第17章基于Oracle数据库的应用开发.ppt
《Oracle-10g数据库基础教程第17章基于Oracle数据库的应用开发.ppt》由会员分享,可在线阅读,更多相关《Oracle-10g数据库基础教程第17章基于Oracle数据库的应用开发.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Oracle10g 数据库基础教程2009第第17 基于基于Oracle数据库的应数据库的应用开发用开发Oracle10g 数据库基础教程2009本章内容本章内容p利用PL/SQL程序实现分页查询 p基于Oracle数据库的人事管理系统开发 Oracle10g 数据库基础教程2009本章要求本章要求p掌握利用PL/SQL程序实现分页查询 p掌握利用JDBC连接数据库的方法p了解基于数据库的应用系统开发过程p了解人事管理系统部分核心代码的实现Oracle10g 数据库基础教程200917.1 利用利用PL/SQL实现分页查询实现分页查询p利用集合实现分页查询p利用游标变量实现分页查询p分页查询在
2、Java开发中的应用Oracle10g 数据库基础教程200917.1.1 利用集合实现分页查询利用集合实现分页查询p如果要对特定结构的结果集进行分页查询,则可以使用集合实现。p利用分页查询实现对员工工资名次、员工号、员工名、工资和部门号的查询。Oracle10g 数据库基础教程2009pCREATE OR REPLACE PACKAGE emppkg ISp -定义结果集中每条记录的类型p TYPE t_record IS RECORD(p rn INT,p empno emp.empno%TYPE,p ename emp.ename%TYPE,p sal emp.sal%TYPE,p de
3、ptno emp.deptno%TYPE);p -定义保存返回结果集的集合类型p TYPE emplist IS TABLE OF t_record;p -定义个实现分页显示的过程p PROCEDURE sp_page(p p_pageSize IN OUT INT,-每页输出的记录数p p_curPageNo IN OUT INT,-当前页码p p_outCollection OUT emplist -查询返回当前页数据的集合p );pEND;Oracle10g 数据库基础教程2009pCREATE OR REPLACE PACKAGE BODY emppkg ISp PROCEDURE s
4、p_page(p p_pageSize IN OUT INT,-每页输出的记录数p p_curPageNo IN OUT INT,-当前页码p p_outCollection OUT emplist)-查询返回当前页数据的集合p ASp v_startRownum NUMBER;p v_endRownum NUMBER;p v_totalRecords NUMBER;p v_totalPages NUMBER;p indexValue BINARY_INTEGER:=1;p BEGINp -查询记录总数p SELECT count(*)INTO v_totalRecords FROM emp;
5、p -验证页面记录数量p IF p_pageSize 0 THENp p_pageSize:=10;p END IF;Oracle10g 数据库基础教程2009p -计算总页数p IF MOD(v_totalRecords,p_pageSize)=0 THENp v_totalPages:=v_totalRecords/p_pageSize;p ELSEp v_totalPages:=floor(v_totalRecords/p_pageSize)+1;p END IF;p -验证页号p IF p_curPageNo v_totalPages THENp p_curPageNo:=v_tota
6、lPages;p END IF;Oracle10g 数据库基础教程2009p-执行分页查询 p v_startRownum:=(p_curPageNo-1)*p_pageSize+1;p v_endRownum:=p_curPageNo*p_pageSize;p p_outCollection:=emplist();p FOR v_emp IN(SELECT*FROM (p SELECT ROWNUM rn,empno,ename,sal,deptno FROM p (SELECT empno,ename,sal,deptno FROM emp p WHERE sal IS NOT NULL
7、ORDER BY sal)A p WHERE ROWNUM=v_startRownum)LOOPp p_outCollection.extend;p p_outCollection(indexValue):=v_emp;p indexValue:=indexValue+1;p END LOOP;p END sp_page;pEND emppkg;Oracle10g 数据库基础教程2009p通过对包中分页查询过程的调用,可以根据需要输出特定页的数据。pDECLARE p v_pageSize INT:=5;p v_curPageNo INT:=2;p v_emplist emppkg.empli
8、st;pBEGINp emppkg.sp_page(v_pageSize,v_curPageNo,v_emplist);p DBMS_OUTPUT.PUT_LINE(The pagesize is:|v_pageSize);p DBMS_OUTPUT.PUT_LINE(The current page NO.is:|p v_curPageNo);p FOR i IN 1.v_emplist.COUNT LOOPp DBMS_OUTPUT.PUT_LINE(v_emplist(i).rn|p v_emplist(i).empno|p v_emplist(i).ename);p END LOOP;
9、pEND;Oracle10g 数据库基础教程2009p执行结果为nThe pagesize is:5nThe current page NO.is:2n6 7521 WARDn7 7654 MARTINn8 7499 ALLENn9 2 WANGn10 7782 CLARKOracle10g 数据库基础教程200917.1.2 利用游标变量实现分页查询利用游标变量实现分页查询p如果要对任意查询实现分页,则可以使用游标变量来实现。Oracle10g 数据库基础教程2009pCREATE OR REPLACE PACKAGE curspkg ISp TYPE refCursorType IS RE
10、F CURSOR;p PROCEDURE sp_page(p p_pageSize IN OUT INT,-每页输出的记录数p p_curPageNo IN OUT INT,-当前页码p p_sqlSelect VARCHAR2,-查询语句,含排序部分p p_totalPages OUT INT,-返回总页数p p_totalRecords OUT INT,-返回总记录数p p_outCursor OUT refCursorTypep -查询返回当前页的数据p );p END;Oracle10g 数据库基础教程2009pCREATE OR REPLACE PACKAGE BODY CURSPK
11、G ISp PROCEDURE sp_page(p p_pageSize IN OUT INT,p p_curPageNo IN OUT INT,p p_sqlSelect VARCHAR2,p p_totalPages OUT INT,p p_totalRecords OUT INT,p p_outCursor OUT refCursorType)p ISp v_countSql VARCHAR2(1000);p v_startRownum INT;p v_endRownum INT;p v_sql VARCHAR2(4000);p BEGINp v_countSql:=p SELECT t
12、o_char(count(*)FROM(|p_sqlSelect|);p EXECUTE IMMEDIATE v_countSql INTO p_totalRecords;Oracle10g 数据库基础教程2009p IF p_pageSize 0 THENp p_pageSize:=10;p END IF;p IF MOD(p_totalRecords,p_pageSize)=0 THENp p_totalPages:=p_totalRecords/p_pageSize;p ELSEp p_totalPages:=floor(p_totalRecords/p_pageSize)+1;p EN
13、D IF;p IF p_curPageNo p_totalPages THENp p_curPageNo:=p_totalPages;p END IF;Oracle10g 数据库基础教程2009p v_startRownum:=p_curPageNo*p_pageSize;p v_endRownum:=(p_curPageNo-1)*p_pageSize+1;p v_sql:=SELECT*FROM(p SELECT ROWNUM rn,A.*FROM(|p_sqlSelect|)A p WHERE rownum=|to_char(v_endRownum);p OPEN p_outCursor
14、 FOR v_sql;p END sp_page;END;Oracle10g 数据库基础教程2009pSQLVARIABLE v_cursor REFCURSORpSQLDECLAREp v_pageSize NUMBER:=10;p v_curPageNo NUMBER:=2;p v_sql VARCHAR2(1000);p v_totalPages NUMBER;p v_totalRecordCount NUMBER;p BEGINp v_sql:=pSELECT*FROM emp WHERE sal IS NOT NULL ORDER BY sal;pcurspkg.sp_page(v_
15、pageSize,v_curPageNo,v_sql,v_totalPages,p v_totalRecordCount,:v_cursor);p DBMS_OUTPUT.PUT_LINE(The pagesize is:|v_pageSize);p DBMS_OUTPUT.PUT_LINE(p The current page NO.is:|v_curPageNo);p DBMS_OUTPUT.PUT_LINE(p The totalPages is:|v_totalPages);p DBMS_OUTPUT.PUT_LINE(p The totalRecords is:|v_totalRec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 10 数据库 基础教程 17 基于 应用 开发
限制150内