ZDNetChina中文社区 » 数据库开发 » Oracle » Oracle Package中返回游标的写法和调用


2007-12-8 23:13 培训机构
Oracle Package中返回游标的写法和调用

[size=2]Oracle Package有哪些作用呢? [/size][size=2]简化应用设计、提高应用性能、实现信息隐藏、子程序重载。 [/size][size=2]下面是package部分代码。 [/size][size=2][/size]  [align=left][size=2][/size][/align][align=left][table=400][tr][td][size=2]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;[/size][/td][/tr][/table][/align][size=2]以上是packages的定义。 [/size][size=2]下面是package body的定义了 [/size][align=left][size=2][/size][/align][align=left][table=400][tr][td][size=2]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;[/size][/td][/tr][/table][/align][size=2]Oracle Package的基本就这写了。其余的看业务的需求了。 [/size][size=2]下面是jdbc代码的调用。 [/size][size=2]当然如果采用jdbc直接获得Connection下面的代码是没问题的。 [/size][align=left][size=2][/size][/align][align=left][table=400][tr][td][size=2]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();    }[/size][/td][/tr][/table][/align][size=2]但是,如果采用连接池(比如:采用Weblogic或jboss等web服务器自带的连接池),这段代码就会让你头疼了。不信你试试。抛出CastClassException。 [/size][size=2]下面是另一种写法,保你没事。这种写法风水好。 [/size][align=left][size=2][/size][/align][align=left][table=400][tr][td][size=2]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);[/size][/td][/tr][/table][/align][size=2]差别很简单。 [/size][size=2]可以看看weblogic和jboss实现连接池的代码就知道了。 [/size][align=left][size=2]一路ok了。 [/size][/align]

2008-4-21 06:38 翠花上欢喜陀
同意楼上意见~

[size=5]同意楼上兄弟的意见~[/size]

-------------------------------------------------------------------------------------------------------------------
[url=http://www.kgdsn.cn/zjlhjsfq.htm][size=1][color=black]浙江老虎機上分器[/color][/size][/url][color=black],[/color][url=http://www.kgdsn.cn/shlhjsfq.htm][size=1][color=black]上海老虎機上分器[/color][/size][/url][color=black],[/color][url=http://www.kgdsn.cn/jslhjsfq.htm][size=1][color=black]江苏老虎機上分器[/color][/size][/url][color=black],[/color][url=http://www.kgdsn.cn/sgjsfq.htm][size=1][color=black]水果机上分器[/color][/size][/url][color=black],[/color][url=http://www.kgdsn.cn/sgjykq.htm][size=1][color=black]水果机遥控器[/color][/size][/url]

页: [1]


Powered by Discuz!  Archiver   © 2001-2006 Comsenz Inc.