首页
IT
登录
6mi
u
盘
搜
搜 索
IT
Oracle之存储过程实现分页
Oracle之存储过程实现分页
xiaoxiao
2021-04-03
28
存储过程如下:
--开发一个包
--建立一个包,在该包中,我定义类型test_cursor,是个游标。 如下:
create
or
replace
package testpackage
as
TYPE test_cursor
is
ref
cursor
;
end
testpackage;
--开始编写分页的过程
create
or
replace
procedure
fenye
(tableName
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;
begin
--执行部分
v_sql:=
'select * from (select t1.*, rownum rn from (select * from '
||tableName||
') 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;
--计算myPageCount
--if myrows%Pagesize=0 then这样写是错的
if mod(myrows,Pagesize)=0
then
myPageCount:=myrows/Pagesize;
else
myPageCount:=myrows/Pagesize+1;
end
if;
--关闭游标
close
p_cursor;
end
;
Java端代码:
import
java.sql.CallableStatement;
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.ResultSet;
import
java.sql.SQLException;
public
class
Fenye
{
public
static
void
main(String[] args)
{
Connection ct =
null
;
CallableStatement cs =
null
;
try
{
// 1.加载驱动
Class.forName(
"oracle.jdbc.driver.OracleDriver"
);
// 2.得到连接
ct = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:orcl"
,
"HONG"
,
"123"
);
// 3.创建CallableStatement
cs = ct.prepareCall(
"{call fenye(?,?,?,?,?,?)}"
);
// 4.给第?赋值
cs.setString(
1
,
"emp"
);
cs.setInt(
2
,
5
);
cs.setInt(
3
,
2
);
// 注册总记录数
cs.registerOutParameter(
4
, oracle.jdbc.OracleTypes.INTEGER);
// 注册总页数
cs.registerOutParameter(
5
, oracle.jdbc.OracleTypes.INTEGER);
// 注册返回的结果集
cs.registerOutParameter(
6
, oracle.jdbc.OracleTypes.CURSOR);
// 5.执行
cs.execute();
// 取出总记录数 /这里要注意,getInt(4)中4,是由该参数的位置决定的
int
rowNum = cs.getInt(
4
);
int
pageCount = cs.getInt(
5
);
ResultSet rs = (ResultSet) cs.getObject(
6
);
// 显示一下,看看对不对
System.out.println(
"rowNum="
+ rowNum);
System.out.println(
"总页数="
+ pageCount);
while
(rs.next())
{
System.out.println(
"编号:"
+ rs.getInt(
1
) +
" 名字:"
+ rs.getString(
2
) +
" 工资:"
+ rs.getFloat(
6
));
}
}
catch
(Exception e)
{
e.printStackTrace();
}
finally
{
// 6.关闭各个打开的资源
try
{
if
(
null
!= cs)
{
cs.close();
}
}
catch
(SQLException e)
{
e.printStackTrace();
}
try
{
if
(
null
!= ct)
{
ct.close();
}
}
catch
(SQLException e)
{
e.printStackTrace();
}
}
}
}
转载请注明原文地址: https://ju.6miu.com/read-665923.html
技术
最新回复
(
0
)