pl/sql过程分页显示小案例


pl/sql过程分页显示小案例

编写一个过程,要求可以输入表名,输入每页显示的记录数,输入当前页,返回总记录数,总页数,和返回的结果集

---------------------------------------------------------------------

SQL>create or replace package testPackage as type test_cursor(游标名) is ref cursor(游标)

end testPackage

SQL>create procedure p8(table_name in varchar2,--表名

pageSize in number,--当前显示的记录数

pageNow in number,--当前页

--下面都是要返回的内容,其值在过程处理中赋予

myrows out number,--总记录数

myPageCount out number,--总页数

p_cursor out testPackage.test_cursor--返回的结果集

) is

--定义sql语句

v_sql varchar2(1000);

v_begin number := (pageNow - 1)*pageSize + 1; -- 每页显示的最少数

v_end number := pageNow * pageSize;--每页显示的最大数

bgein

v_sql := 'select * rownum from (SQL>select a1.*,rownum rn from (select name,sal from '||table_name||')

a1 where rownum<='||v_end||') whererownum>'||v_begin||'';

open p_cursor for v_sql;--打开一个游标,将游标和sql语句关联起来

v_sql : = 'selectcount(*) from '||table_name'';--计算myrows和myPageCount

execute immediate v_sql intomyrows ;--执行sql,并把返回值赋给myrows来记录总记录数

if mod(myrows,pageSize)= 0 then--计算总页数,注意思路,很好理解

myPageCount := myrows/Pagesiez;

else

myPageCount := myrows/Pagesiez + 1;

end if

close p_cursor;--关闭游标

end;

/

------------------------------------------------------------------------------------------------------

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:

CallableStatement cs = ct.prepareCall("{call p8(?,?,?,?,?,?)}");

//给?赋值

cs.setString(1,"myTable");

sc.setInt(2,5);

sc.setInt(3,1);

//给out参数?赋值

cs.registOutPrameter(4,oracle.jdbc.OracleTypes.INTEGER);//这侧记录总数

cs.registOutPrameter(5,oracle.jdbc.OracleTypes.INTEGER);//注册总页数

cs.registOutPrameter(6,oracle.jdbc.OracleTypes.CURSOR);//注册返回的结果集

//执行

cs.execute();

//得到结果集

ResultSet rs = (ResultSet) cs.getObject(6);

//取出总记录数

int rowNum = cs.getInt(4);

//返回总页数

int pagecount = cs.getInt(5);

while(rs.next()){

System.out.println(rs.getInt(1) + "--" + rs.getString(2));

}

//关闭相关资源,此处略写

作者 chunqiuwei


上一篇:伤感QQ分组:一个人等待,不存在的爱

下一篇:北电8600交换机VLAN配置命令


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器