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

上一篇 / 下一篇  2007-12-22 09:05:00 / 个人分类:学堂

 

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


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-01  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 3314
  • 日志数: 155
  • 建立时间: 2007-04-07
  • 更新时间: 2008-04-07

RSS订阅

Open Toolbar