操作系统  办公  实用知识  设计  开发  WEB开发  移动开发  数据库  软件工程  网管  安全  管理  信息化  答疑  渠道 

在Oracle Package中返回游标的写法和调用

2008-3-21 网友评论 0 条 点击进入论坛

  在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实现连接池的代码就会理解的更加清楚。

已有 0 位对此文章感兴趣的网友发布了看法    
我来评两句 登录邮箱: 密码:
  匿名发表
今日推荐
技术文库(共有 46430 篇文章)
操作系统
办公软件
实用知识
网络管理
软件开发
WEB开发
软件工程
数据库
设计在线
信息安全
行业信息化
管理信息化
重点推荐
电子杂志订阅
点击电子杂志名称查看样刊
输入E-mail地址即可订阅
E-mail