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();
}
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();
}
相关文章推荐
- 【学习】java下实现调用oracle的存储过程和函数
- java下实现调用oracle的存储过程和函数
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- 一个简单的oracle分页存储过程的实现和调用
- 存储过程调用,java中通过bboss persistent实现数据库存储过程的调用(命名变量绑定)
- java调用Oracle分页存储过程
- java下实现调用oracle的存储过程和函数
- 一个简单的oracle分页存储过程的实现和调用
- 一个简单的oracle分页存储过程的实现和调用
- java下实现调用oracle的存储过程和函数
- java下实现调用oracle的存储过程和函数
- oralce用存储过程实现分页 以及 用java调用这个存储过程的代码
- Java代码调用Oracle的存储过程,存储函数和包
- 调用存储过程,java中通过bboss persistent实现数据库存储过程的调用(位置变量绑定)
- Day60-Oracle04 - PLSQL编程、游标cursor、例外exception、存储过程(procedure)、存储函数(function)、java调用存储过程、触发器(trigger)
- java下实现调用oracle的存储过程和函数
- java调用Oracle分页存储过程
- 一个简单的oracle分页存储过程的实现和调用
- oracle顺序控制语句goto、null和分页过程中输入输出存储、java程序的调用过程