`

java 调用oracle存储过程返回多个游标结果集

阅读更多

1.新建一个packages,声明返回多个游标的结果集

 

CREATE OR REPLACE PACKAGE testxx
  IS
    TYPE   retcursor    IS   REF   CURSOR;
    TYPE   retcursor2    IS   REF   CURSOR;
   PROCEDURE pro_read
     (
       outcurse   OUT retcursor,
       outcurse2   OUT retcursor2
     );
   END;

2。新建packages body

CREATE OR REPLACE PACKAGE BODY testxx IS
   PROCEDURE pro_read
   (
       outcurse  OUT retcursor,
       outcurse2  OUT retcursor2
   )
   IS
   begin
        OPEN outcurse FOR
         select 1,2 from dual;
        OPEN outcurse2 FOR
         select 2,4 from dual;
        return;
   end;
END;

3.java 实现代码

得到数据库连接那段就不再重复出来了

 public void testPro () throws Exception {    
        CallableStatement cstmt=null;
        Connection conn=null;
         ResultSet  rs = null;
         ResultSet  rs1 = null;
        try {
            conn=DBConnectionManager.getInstance().getConnection(dbName);
            logger.info("---conn--------"+conn); 
            String sqlstr = "{call  TESTXX.PRO_READ(?,?)}";           
            cstmt = conn.prepareCall(sqlstr);
            cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); //outcurse
            cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR); //outcurse2
             cstmt.execute();
           
             rs = (ResultSet)cstmt.getObject(1);
             rs1 = ((oracle.jdbc.OracleCallableStatement)cstmt).getCursor(2);
             while(rs.next()){ 
              logger.info(rs.getString("1")+"-----------"+rs.getString("2")); 
            }
            while(rs1.next()){ 
                 logger.info(rs1.getString("2")+"-----------"+rs1.getString("4")); 
            }           
            cstmt.close();
        } catch (SQLException se) {
            logger.error (se.getMessage(),se);
        } finally {
            try {
            if (rs != null){rs.close();}
            if (rs1 != null){rs1.close();}
            if (cstmt != null) cstmt.close();
            conn.close();
            } catch(SQLException see) {          
                logger.info("Exception occured closing stmt objects: " + see);
            }
        }
    }

 

分享到:
评论

相关推荐

    Oracle11g从入门到精通2

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的...个完整案例来介绍基于Java开发包和Oracle数据库进行案例开发的详细过程...

    JAVA面试题最全集

    一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? ...

    Oracle11g从入门到精通

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的...个完整案例来介绍基于Java开发包和Oracle数据库进行案例开发的详细过程...

    oracle数据库经典题目

    当多个用户同时连接同一个实例时,SGA区数据供多个用户共享,所以SGA区又称为共享全局区。用户对数据库的各种操作主要在SGA区中进行。该内存区随数据库实例的创建而分配,随实例的终止而释放。PGA区是在用户进程连接...

    PLSQLDeveloper下载

    其含义是定义一个游标c_emp,代表employee表中所有emp_id字段为3的结果集。当需要操作该结果集时,必须完成三步:打开游标、使用fetch语句将游标里的数据取出、关闭游标。 游标用来处理从数据库中检索的多行记录...

    java面试宝典

    42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 12 43、说出一些常用的类,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以...

    Java面试宝典2020修订版V1.0.1.doc

    19、用JDBC如何调用存储过程 69 20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? 73 23、List、Set和Map的区别? 74 24、Collection 和 ...

    Oracle9i的init.ora参数中文说明

    使用多个 UTL_FILE_DIR 参数即可指定多个目录。请注意所有用户均可读取或写入 UTL_FILE_DIR 参数中指定的所有文件。 值范围: 任何有效的目录路径。 默认值: 无 plsql_v2_compatibility: 说明: 设置 PL/SQL 兼容级...

    oracle实验报告

    2、 定义一个为修改职工表(emp)中某职工工资的存储过程子程序,职工名作为形参,若该职工名在职工表中查找不到,就在屏幕上提示“查无此人”然后结束子程序的执行;否则若工种为MANAGER的,则工资加$1000;工种为...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    产品安装过程中将会出现以上2个界面 9. 步骤8/8:完成安装  卸载Oracle 1. 在运行services.msc打开服务,停止Oracle的所有服务。 2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\...

    Oracle 10g 开发与管理

    2.调用存储过程 72 3.修改(替换同名的存储过程) 73 4.参数 73 (1)In 参数:向过程传入一个值 73 (2)Out参数: 73 (3)In Out参数: 74 (4)默认值 74 5.局部变量和子过程 74 8.2函数(function) 75 1.创建 75...

    PL/SQL 基础.doc

    注意:1)有多个BOOLEAN表达式时候 AND(与),OR(或),NOT(非) 2)条件为FALSE与TRUE 相同; 2. 循环语句 1) Loop 循环 Loop ... (循环体) IF boolean_expr(条件) THEN /* 加条件语句,当满足条件时候退出循环*/ ...

    java基础题 很全面

    53. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 13 54. java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 13 55. java中有几种类型的流?...

    千方百计笔试题大全

    42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 12 43、说出一些常用的类,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

Global site tag (gtag.js) - Google Analytics