oracle实现存储过程的分页并用java代码调用存储过程

本文介绍了一个用于Oracle数据库的分页查询存储过程实现,并提供了通过Java代码调用该存储过程的方法。该存储过程能够根据指定的表名、页面大小和当前页数返回所需的记录集合,同时计算出总记录数和总页数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create table emp(
id int,
ename varchar2(30),
sale number(7,2) --共7位xxxxx.xx 最大就是这样的数据
)

--开发一个包---

create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;

--开始写分页的过程
create or replace procedure fenye

(tableName in varchar2,
pagesizes in number,--一页显示记录
pageNow in number,
myrows out number,--总记录数
myPageCount out number,--总页数
p_cursor out testpackage.test_cursor--返回的记录集
)is
--定义变量
--定义sql语句 字符串---
v_sql varchar2(1000);--定义sql长度
--定义两个整数
v_begin number:=(pageNow-1)*pagesizes+1;
v_end number:=pageNow*pagesizes;
begin
--开始执行-----
v_sql:='select * from
(select t1.*,rownum rn from ( select * from '||tableName||' order by sale) t1 where rownum<='||v_end||')
where rn>='||v_begin;
--把游标和sql关联----
open p_cursor for v_sql;
--计算myrows和mypageCount
--组织了一个sql 语句
v_sql:='select count(*) from '||tableName;
--执行sql,并把返回的值,赋给 myrows
execute immediate v_sql into myrows;-- 执行字符串的sql语句 必须格式
--计算mypageCount--
if mod(myrows,pagesizes)=0 then
myPageCount:=myrows/pagesizes;
else
myPageCount:=myrows/pagesizes+1;
end if;
--关闭游标
close p_cursor;--必须关闭游标,不是不能释放占有的空间,这很重要
end;

使用java代码 调用oracle 的存储过程

try{
          Class.forName("oracle.jdbc.driver.OracleDriver");
           Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.102:1521:orcl","plsqltest","plsqltest");
           CallableStatement cs=ct.prepareCall("call fenye(?,?,?,?,?,?)");
           //这是一个输入 参数
           cs.setString(1,"emp");
           cs.setInt(2,3);
           cs.setInt(3,1);
           //两个输出参数 必须写上
           cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
       cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
       cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
           //执行
           cs.execute();
//           把返回值 放入 java 变量中
          int sumRows=cs.getInt(4);
          int sumPage=cs.getInt(5);
          System.out.println("sumRows : is"+sumRows+" sumPage is"+sumPage);
             ResultSet rs=(ResultSet)cs.getObject(6);
           //关闭
             while(rs.next())
             {
              System.out.println("编号="+rs.getInt(4)+"姓名="+rs.getString(2)+"薪水="+rs.getFloat(3));
             }
           cs.close();
           ct.close();
          }catch(Exception e){
           e.printStackTrace();
          }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值