快速业务通道

在JDBC中取得Oracle存储过程动态结果集 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

在JDBC中取得Oracle存储过程动态结果集

时间:2011-07-29

1. 关于oracle和结果集

其实在大多数情况下,我们并不需要从oracle存储过程里返回一个或多个结果集,除非迫不得已。

如果大家用过MS SQL Server或Sybase SQL Server,那么从存储过程返回一个动态的结果集是一件非常容易的事情,只要在存储过程结束时写上

“select column1,column2,.... from table_list where condition“

就可以了。

但在Oracle中不能这样做. 我们必须使用Oracle Cursor.

在Oracle PL/SQL中,Cursor用来返回一行或多行记录,借助Cursor,我们可以从结果集中取得所有记录.

Cursor并不难,但是要从Oracle存储过程中返回结果集, 就需要用到Cursor变量,Cursor变量Oracle PL/SQL的类型是REF CURSOR, 我们只要定义了REF CURSOR 类型就可以使用Cursor变量. 比如我们可以这样定义:

TYPE ref_cursor IS REF CURSOR;

了解了Cursor以及Cursor变量,下面就介绍如何使用Cursor变量给JDBC返回结果集.

2. 定义表结构

在以下例子里,我们要用到一张表Hotline.

Create table hotline(country varchar2(50),pno varchar2(50));

3. 定义存储过程

  create or replace package PKG_HOTLINE istype HotlineCursorType is REF CURSOR;    function getHotline return HotlineCursorType;    end;    create or replace package body PKG_HOTLINE isfunction getHotline return HotlineCursorType ishotlineCursor HotlineCursorType;    beginopen hotlineCursor for select * from hotline;    return hotlineCursor;    end;    end;

在这个存储过程里,我们定义了HotlineCursorType 类型,并且在存储过程中简单地查找所有的记录并返回HotlineCursorType.

4. 测试存储过程

在Oracle SQL/Plus里登陆到数据库. 按以下输入就看到返回的结果集.

SQL> var rs refcursor;SQL> exec :rs := PKG_HOTLINE.getHotline;SQL> print rs;

5. Java调用

简单地写一个Java Class.

  ....public void openCursor(){Connection conn = null;ResultSet rs = null;    CallableStatement stmt = null;    String sql = “{? = call PKG_HOTLINE.getHotline()}“;    try{conn = getConnection();stmt = conn.prepareCall(sql);    stmt.registerOutParameter(1,OracleTypes.CURSOR);    stmt.execute();    rs = ((OracleCallableStatement)stmt).getCursor(1);    while(rs.next()){String country = rs.getString(1);    String pno = rs.getString(2);    System.out.println(“country:“+country+“|pno:”+pno);    }}catch(Exception ex){ex.printStackTrace();    }finally{closeConnection(conn,rs,stmt);    }}.....

好了,大功告成.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号