您的位置:首页 > 数据库 > Oracle

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

2011-05-19 16:43 1021 查看
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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: