在Oracle Package中返回游标的写法和调用:
具体示例如下:
create or replace package FirstPage is
-- Author : MECON
-- Created : 2006-7-20 上午 09:34:44
-- Purpose : 用来处理首页各个模块的显示情况
-- Public type declarations
type outlist is REF CURSOR;
--高中
Procedure getSeniorHighSchool(
maxrow in number,
minrow in number,
return_list out outlist
);
//可以定义其他
end FirstPage; |
以上是packages的定义。
下面是package body的定义:
create or replace package body FirstPage is
--高中
Procedure getSeniorHighSchool(
maxrow in number,
minrow in number,
return_list out outlist
)as
begin
open return_list
for
select * from (select a.*,rownum rnum from (
//业务语句
) a where rownum<=maxrow) where rnum >=minrow;
end;
//抒写其他过程
end FirstPage; |
Oracle Package的基本就这写了。其余的看业务的需求了。
以下是jdbc代码的调用。
当然如果采用jdbc直接获得Connection下面的代码是没问题的。
oracle.jdbc.OracleCallableStatement cs = null;
String sqlStr = "{call firstpage.getSeniorHighSchool(?,?,?)}";
ResultSet rs = null;
try{
cs = (oracle.jdbc.OracleCallableStatement)conn.prepareCall(sqlStr);
cs.setLong(1,arg[0]);
cs.setLong(2,arg[1]);
cs.registerOutParameter(3,oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
rs = cs.getCursor(3);
while(rs.next()){
//...........
}
rs.close();
cs.close();
}catch(Exception e){
System.out.println("produce error ");
e.printStackTrace();
} |
注意:如果采用连接池(例如:采用Weblogic或jboss等web服务器自带的连接池),这段代码就会抛出CastClassException.
下面是另一种标准的写法。
CallableStatement cs = null; cs = conn.prepareCall(sql); cs.setInt(1,maxrow); cs.setInt(2,minrow); cs.registerOutParameter(3,oracle.jdbc.OracleTypes.CURSOR); cs.execute(); rs = (ResultSet)cs.getObject(3); |
你可以发现,差别是很简单的,你只需看一下weblogic和jboss实现连接池的代码就会理解的更加清楚。
文章地址: http://www.qqread.com/oracle/2007/12/b388023.html相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- Oracle 10g基础应用 (4482篇文章)
- 用“kill”命令终止“Oracle”的过程 (0次浏览)
- 深入了解Oracle的最大可用性体系结构 (0次浏览)
- 基于SQL几个常用的几个系统表 (0次浏览)
- Oracle本周二将发布27个安全漏洞补丁 (0次浏览)
- 如何在Oracle数据库中屏蔽英文提示信息 (0次浏览)
- 数据库文件的加载和挂起 (0次浏览)
- 数据库技术:在不断的完善中继续前行 (0次浏览)
- 安装Oracle 9i遇到的两个问题 (0次浏览)
- TransactionScope中优先使用Oracle的.NET驱动 (0次浏览)
- 详细介绍手工创建oracle数据库 (0次浏览)



