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]