create or replace package my_package as
type my_cursor is ref cursor;
end my_package;
--创建一个分页过程
create or replace procedure fenye
( my_table in varchar2,--表明
my_record in number, --当前页的记录数
my_page in number,--当前的页数
my_sumrecord out number,--总记录数
my_sumpage out number,--总页数
p_cursor out my_package.my_cursor --返回记录集合
)is
--定义变量
v_begin number:=(my_page-1)*my_record+1;
v_end number:=my_page*my_record;
--定义一个sql语句
v_sql varchar2(1000);
begin
--执行sql语句
v_sql:='select * from (select t.*,rownum rn from(select * from ' ||my_table||')t where rownum<='||v_end||')where rn>='||v_begin;
--把游标和sql语句链接
open p_cursor for v_sql;
--计算my_sumrecord和my_sumpage
--写一个sql语句
v_sql:='select count(*) from' || my_table;
--将得到的返回值,赋值给my_sumrecord
execute immediate v_sql into my_sumrecord;
--计算my_sumpage
if mod(my_sumrecord,my_record)=0 then
--总记录数/当前页的记录数为0,那么总页数为:
my_sumpage:=my_sumrecord/my_record;
else
my_sumpage:=my_sumrecord/my_record+1;
end if;
close p_cursor;
end;
package oraclejdbc;
import ;
import ;
import ;
import ;
import ;
public class FenYeTest {
public static void main(String[] args) {
try {
//加载驱动
("");
//建立连接
Connection ct = ("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott", "tiger");
CallableStatement cs=("{call fenye(?,?,?,?,?,?)}");
//给输入的?赋值
(1,"emp");
(2, 2);//第一个2代表fenye(?,?,?,?,?,?)函数里的第2个参数,第2个2代表当前页的记录数
(3, 1);//1代表第1页
//给输出的?赋值
(4, );
(5, );
(6, );
//执行
();
//取出总记录数
int my_sumrecord=(4);//getInt(4)中的4是由参数决定的
//取出总页数
int my_sumpage=(5);
ResultSet rs=(ResultSet) (6);
("总记录数"+my_sumrecord);
("总页数:"+my_sumpage);
while(()){
("编号:"+(1));
}
} catch (Exception e) {
();
}
}
}
用java测试时会报异常:
: ORA-00923: 未找到要求的 FROM 关键字
ORA-06512: 在 "", line 24
ORA-06512: 在 line 1
at .(:439)
at .(:395)
at .(:802)
at .(:436)
at .(:186)
at .(:521)
at .T4CCallableStatement.doOall8(:202)
at .(:1005)
at (:1307)
at (:3449)
at (:3550)
at (:4710)
at (:1374)
at (:28)
原因是这里错了:v_sql:='select count(*) from' || my_table;
修改后为: v_sql:=' select count(*) from'||chr(10)||my_table;
异常处理了!!!