`

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);
            }
        }
    }

 

分享到:
评论

相关推荐

    JAVA调用ORACLE存储过程游标使用

    总结一下,Java调用Oracle存储过程并处理游标的关键步骤包括: 1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes....

    java调用oracle存储过程或者函数

    以上就是Java调用Oracle存储过程或函数的主要知识点,实践中要根据具体情况进行适当的调整和优化。在处理过程中,参考Oracle的JDBC文档和官方示例,以及Java API文档,将有助于理解和解决问题。

    Oracle存储过程返回结果集

    本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...

    Oracle存储过程out游标

    在Java中,我们可以使用JDBC API来调用Oracle存储过程并处理返回的Out游标。`OracleProcedure.java`文件应该包含了这样的代码。以下是一个简单的示例: ```java CallableStatement cs = connection.prepareCall("{ ...

    java调用oracle存储过程并得到结果集

    Oracle存储过程可以返回多个结果集,因此我们需要使用`CallableStatement`而不是`PreparedStatement`。调用存储过程的语法是`{call procedure_name(参数列表)}`。例如: ```java CallableStatement cs = connection....

    Oracle 返回多个结果集

    在Oracle数据库中,返回多个...在存储过程中定义多个游标,然后在客户端应用程序中逐个处理这些游标,可以有效地管理和利用这些结果集。记住,正确地管理游标并确保它们在使用完毕后被关闭,以避免资源泄漏和性能问题。

    用java调用oracle存储过程总结

    在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑...在实际项目中,可能需要处理更复杂的存储过程,包括带有多结果集、游标或异常处理的情况,但基本的调用模式和资源管理原则是相同的。

    Java调用oracle存储过程输出自定义对象或二维表

    在Java编程中,与Oracle数据库交互是常见的任务之一,而调用Oracle存储过程可以实现复杂的业务逻辑。本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们...

    用java调用oracle存储过程总结.pdf

    在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务...此外,如果存储过程返回多个结果集或游标,可以使用`ResultSet`来处理。总的来说,理解并熟练运用这些技巧对Java开发者来说至关重要。

    java调用oracle存储过程示例+分页示例

    总结,Java调用Oracle存储过程涉及多个步骤,包括加载驱动、建立连接、准备`CallableStatement`、设置参数和执行调用。对于有返回值的过程,还需注册输出参数。分页查询则需利用Oracle特有的`ROWNUM`特性,结合游标...

    spring mybatis 调用oracle存储过程

    如果存储过程返回一个结果集,我们可以使用游标(Cursor)来处理。在MyBatis中,可以声明一个方法,其返回类型为Map或自定义的Java Bean,代表存储过程的输出参数。在XML配置中,使用`<select>`标签并设置`...

    java调用oracle存储过程.docx

    ### Java调用Oracle存储过程详解 #### 一、概述 在企业级应用开发中,数据库存储过程被广泛用于实现复杂的业务逻辑处理。Oracle作为一种流行的数据库管理系统,提供了丰富的特性支持复杂查询与事务处理。结合Java...

    Java链接Oracle 存储过程 jdbc BLOG

    总的来说,Java通过JDBC API调用Oracle存储过程涉及以下几个关键步骤:建立连接、定义存储过程调用字符串、设置参数、执行存储过程和处理结果。通过熟练掌握这些步骤,你可以轻松地在Java应用中集成和利用Oracle...

    ibatis调存储过程返回游标

    当存储过程返回游标时,iBatis允许我们通过`resultMap`来映射结果集,例如: ```xml ``` 这个`resultMap`用于将查询结果映射到Java对象上,其中每个`result`元素对应结果集中的一列。 对于返回游标的...

    java Oracle存储过程分页整理

    本教程将深入探讨如何在Java中调用Oracle存储过程来执行分页查询。 首先,我们需要理解分页的基本概念。分页是将大结果集分割成多个小部分,每次只加载一部分数据到内存中,这样可以减少内存消耗,提高响应速度。在...

    Ibatis调用Oracle存储过程返回自定义类型

    ### Ibatis调用Oracle存储过程返回自定义类型 在企业级应用开发中,尤其是在金融、保险等业务场景中,往往需要处理复杂的数据结构与逻辑。本文将深入探讨如何使用Ibatis框架来调用Oracle数据库中的存储过程,并实现...

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    在iBatis中,当存储过程返回一个游标时,你可以将其映射为一个Java List。为此,你需要在Java方法中声明一个List类型的参数,而在SQL映射文件中,使用`<resultMap>`定义一个结果集映射,然后在`<selectResult>`标签...

    oracle存储过程学习经典

    5. **调用Oracle存储过程**:通过Java或Hibernate等工具调用Oracle存储过程,需要注意参数传递和结果集的处理。 #### 动态SQL与存储过程 在存储过程中执行动态SQL,有两种主要方式: 1. **本地动态SQL**:适用于...

    ORACLE技术文档\oracle cursor 游标.doc

    例如,应将`createStatement`和`prepareStatement`方法的调用移出循环,并确保每次执行完`executeQuery`、`executeUpdate`后,如果没有进一步使用结果集,就关闭`Statement`。 Oracle数据库有几个与游标相关的初始...

Global site tag (gtag.js) - Google Analytics