1,首先是oracle的存储过程,利用了cursor
sql 代码
- CREATE OR REPLACE PROCEDURE OTAC_ADM.pro_gettasksubscriber_data (
- msg_overtime IN INTEGER,
- subscriber_total IN INTEGER,
- task_id IN INTEGER,
- retry_subscriber_percent IN NUMBER,
- retry_num IN INTEGER,
- sub_groupid IN INTEGER,
- p_cursor OUT tasksubscriber_package.task_cursor
- )
- IS
- retry_task INTEGER;
- db_retry INTEGER;
- db_new INTEGER;
- db_task_num INTEGER;
-
- BEGIN
- SELECT COUNT (1)
- INTO db_task_num
- FROM otatask t
- WHERE t.statusid = 3;
-
- IF db_task_num > 0
- THEN
- retry_task := subscriber_total / db_task_num * retry_subscriber_percent;
- ELSE
- RETURN;
- END IF;
-
- SELECT COUNT (msgid)
- INTO db_retry
- FROM otatasksubscribers
- WHERE subscriberstatusid = 2
- AND (SYSDATE - msg_overtime / (24 * 3600) - sendingdate) > 0
- AND retrynum < retry_num
- AND sendingstat = 0
- AND taskid = task_id
- AND subgroupid = sub_groupid
- AND iscanretry = 1;
-
- IF db_retry > retry_task
- THEN
- db_retry := retry_task;
- END IF;
-
- db_new := subscriber_total / db_task_num - db_retry;
-
- OPEN p_cursor FOR
-
- SELECT *
- FROM (SELECT msisdn, currentseq, msgid, retrynum, sendingdate,
- subscriberstatusid, patchlastseq, patchlastcode,
- iscanretry
- FROM otatasksubscribers
- WHERE subscriberstatusid = 2
- AND (SYSDATE - msg_overtime / (24 * 3600) - sendingdate) >
- 0
- AND retrynum < retry_num
- AND sendingstat = 0
- AND taskid = task_id
- AND iscanretry = 1
- AND subgroupid = sub_groupid
- ORDER BY currentseq DESC)
- WHERE ROWNUM <= db_retry
- UNION ALL
-
- SELECT *
- FROM (SELECT msisdn, currentseq, msgid, retrynum, sendingdate,
- subscriberstatusid, patchlastseq, patchlastcode,
- iscanretry
- FROM otatasksubscribers
- WHERE subscriberstatusid = 0
- AND taskid = task_id
- AND subgroupid = sub_groupid
- AND iscanretry = 1)
- WHERE ROWNUM <= db_new;
- EXCEPTION
- WHEN NO_DATA_FOUND
- THEN
- NULL;
- WHEN OTHERS
- THEN
-
- RAISE;
- END pro_gettasksubscriber_data;
- /
2.再看看java的调用
java 代码
- CallableStatement proc = null;
- proc = DBConn
- .prepareCall("{ call pro_gettasksubscriber_data(?,?,?,?,?,?,?) }");
- proc.setInt(1, Start.MessageOverTime);
- proc.setInt(2, Start.runnergroupsize);
- proc.setInt(3, taskID);
- proc.setDouble(4, Start.retry_subscriber_percent);
- proc.setInt(5, Start.RetryTimes);
- proc.setLong(6, subGroupId);
- proc.registerOutParameter(7, oracle.jdbc.OracleTypes.CURSOR);
- proc.execute();
- rs = (ResultSet) proc.getObject(7);
3,小心oracle的classes12.jar的bug会造成代码的一些问题。。。
参考
xiaobo.iteye.com/blog/44466
分享到:
相关推荐
以上就是Java调用Oracle带参数存储过程并处理返回集合的基本流程。注意在实际开发中,我们还需要考虑异常处理,资源关闭,以及可能的事务管理等细节。 在处理数组参数时,Oracle提供了PL/SQL TABLE类型的参数,Java...
存储过程是预编译的SQL语句集合,它们可以被多次调用,提高了代码的重用性和执行效率,同时降低了网络流量。以下是关于存储过程和触发器的详细解释: 1. **存储过程的功能特点**: - **复用性**:存储过程可以被多...
通过将一系列复杂的SQL操作封装成一个单独的对象(即存储过程),可以极大地提高数据处理的效率,并简化应用程序的开发。 #### 二、存储过程的优点 1. **提高性能**:存储过程在创建时会被编译一次,之后每次调用...
在IT领域,存储过程是数据库管理系统(DBMS)中预编译的SQL语句集合,它们可以被封装起来,以供以后重复使用。存储过程在提高应用性能、增强安全性、减少网络流量以及实现复杂的业务逻辑方面具有显著优势。本主题将...
总结来说,Oracle存储过程通过`OUT`参数和`SYS_REFCURSOR`类型能够方便地返回结果集。在Java应用中,我们可以使用JDBC的`CallableStatement`和`ResultSet`来调用存储过程并处理返回的结果。这种方式在处理大量数据或...
2. 执行存储过程:存储过程可以通过接收参数向调用者返回结果集,结果集的格式由调用者确定。 3. 查看和修改存储过程:存储过程可以在SQL Server中被查看和修改。 4. 重命名和删除存储过程:存储过程可以在SQL ...
### 执行SQL Server 存储过程并返回DataSet 在软件开发过程中,经常需要与数据库进行交互,其中一种常见的场景就是通过调用存储过程来获取数据并处理这些数据。本篇文章将详细探讨如何在C#中执行SQL Server的存储...
Delphi 中调用 Oracle 的存储过程返回数据集是指在 Delphi 应用程序中调用 Oracle 数据库中的存储过程,并将存储过程的返回结果集显示在 Delphi 应用程序中。这种方式可以将 Oracle 数据库中的数据实时同步到 Delphi...
在数据库管理中,存储过程是预编译的SQL语句集合,可以视为可重用的函数,用于执行特定任务或处理数据。它们提高了代码的效率和安全性,因为它们只需要在首次创建时编译,之后的调用只需执行已编译的版本。在处理...
1. 什么是存储过程:存储过程是一组Transact-SQL语句的集合,能够接受和返回用户提供的参数。 2. 存储过程的分类:存储过程可以分为永久存储过程、局部临时过程和全局临时过程。 3. 创建存储过程:使用CREATE PROC...
如果存储过程有输入参数,可以通过OracleParameter对象添加到Command对象的Parameters集合中: ```csharp OracleParameter param1 = new OracleParameter("param1", OracleDbType.Varchar2); param1.Value = "some...
Oracle 存储过程是数据库管理中的重要组成部分,它允许开发者在数据库服务器端编写复杂的业务逻辑,提高应用程序的性能。这个“Oracle 存储过程资料集合”显然是一份珍贵的学习资源,其中可能包含了关于如何创建、...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
在IT行业中,数据库管理和Web...通过学习以上资源,开发者可以更好地理解并掌握`jsp`调用存储过程的技巧,提升Web应用程序的开发能力。在实际工作中,应结合具体业务需求,灵活运用这些知识,提高程序的稳定性和性能。
6. 存储过程的调用:存储过程可以通过接收参数向调用者返回结果集,返回状态值给调用者,指明调用是成功或是失败。 7. 存储过程的嵌套调用:存储过程可以嵌套调用其他存储过程,以实现复杂的业务逻辑。 8. 存储...
存储过程(Stored Procedure)是一种预先定义并存储于数据库服务器上的SQL指令集合,它能够通过参数化的方式接受输入数据,执行复杂的操作,并返回结果。存储过程能够支持变量声明、条件执行等高级编程特性。 **...
这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,我们将深入探讨存储过程的基本概念、结构、类型,以及如何通过这些源码进行学习。 1. **存储过程的...
新手可以通过这些实例了解如何定义存储过程,如何在SQL语句中调用它们,以及如何传递参数和返回结果。 例如,一个简单的存储过程可能是用于插入新记录的,如下所示: ```sql CREATE PROCEDURE InsertUser @...
1. 返回值:通过`RETURN`语句,存储过程可以返回一个整数值。 2. 存储过程的嵌套:一个存储过程可以调用另一个存储过程。 3. 错误处理:使用`DECLARE`、`BEGIN...END`和`HANDLE`来处理异常。 总结,MySQL的存储过程...