create or replace package pkg_sxxtj as
type sxxtj_out_values is ref cursor;
procedure auditing_result(startDate in date,endDate in date,out_list out sxxtj_out_values);
end pkg_sxxtj;
****************************************************************************
create or replace package body pkg_sxxtj as
procedure auditing_result(startDate in date,endDate in date,out_list out sxxtj_out_values)
is
sqlStr varchar2(900);
begin
if startDate is null and endDate is null then
open out_list for
select * from (select t.node_id as node_id, count(t.node_id) as total_count,
sum(case when t.operate_status='0' then 1 else 0 end) as sh_count,
sum(case when t.operate_status='1' then 1 else 0 end) as sy_count,
sum(case when t.over_time > t.operate_date then 1 else 0 end) as js_count,
sum(case when t.over_time < t.operate_date then 1 else 0 end) as cs_count
from card_business_node t where t.node_id not in (0007, 0011) group by t.node_id
union
select s.sh_node_id as node_id, count(s.sh_node_id) as total_count,
sum(case when s.operate_status='0' then 1 else 0 end) as sh_count,
sum(case when s.operate_status='1' then 1 else 0 end) as sy_count,
sum(case when s.over_time > s.operate_date then 1 else 0 end) as js_count,
sum(case when s.over_time < s.operate_date then 1 else 0 end) as cs_count from card_business_sh_node s group by s.sh_node_id) res;
end if;
end auditing_result;
end pkg_sxxtj;
*************************************************************************
// 下面是java 源码,从oracle存储过程读取记录集
// 注意一定要用oracle的jdbc API ( 可以从oracle网站下载 )
public void test(){
//Session session=getSession();
Connection con=null;
OracleCallableStatement cs=null;
OracleResultSet rs=null;
SimpleDateFormat sdf=new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE);
sdf.applyPattern("yyyy年MM月dd日 HH时mm分ss秒");
java.sql.Date sd=null;
con=getSession().connection();
try {
cs=(OracleCallableStatement) con.prepareCall("{call pkg_sxxtj.auditing_result(?,?,?)}");
cs.setDate(1, sd);
cs.setDate(2, sd);
cs.registerOutParameter(3,OracleTypes.CURSOR);
//cs.registerOutParameter(3,java.sql.Types.OTHER);
cs.execute();
rs=(OracleResultSet) cs.getCursor(3);
while(rs.next()){
log.info("===================环节号:"+String.valueOf(rs.getString(1)));
log.info("||统计数:"+String.valueOf(rs.getInt(2)));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(cs!=null){
cs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(con!=null){
con.close();
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
分享到:
相关推荐
总的来说,Java调用Oracle存储过程并通过游标返回临时表是一种常见的数据处理方式,它结合了数据库的强大功能和Java的灵活性,为复杂业务场景提供了高效解决方案。在处理大量数据时,正确地管理和使用游标至关重要,...
总结一下,Java调用Oracle存储过程并处理游标的关键步骤包括: 1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes....
我们使用 CALLABLESTATEMENT 来调用存储过程,获取游标类型参数的值,并将其转换为 ResultSet 对象。最后,我们使用 while 循环来遍历 ResultSet 对象,并将结果打印出来。 六、结论 本示例展示了如何使用 ...
本篇文章将详细讲解如何利用JDBC调用存储过程、函数以及处理游标。 首先,存储过程是数据库中预编译的一组SQL语句,它允许我们封装复杂的业务逻辑,提高执行效率,减少网络传输的数据量。在JDBC中调用存储过程通常...
总之,Java调用Oracle存储过程,尤其是处理游标,需要理解JDBC的使用、Oracle特定的类型以及存储过程的参数传递方式。通过合理的编程实践,我们可以高效地在Java应用程序中集成Oracle数据库的复杂操作。
总结一下,Oracle存储过程的Out游标是PL/SQL中返回多行结果的有效方式,Java通过JDBC API可以方便地调用这些存储过程并处理返回的结果集。在实际开发中,这种技术常用于处理复杂的数据查询和更新操作,特别是在需要...
2. 准备CallableStatement对象,它是PreparedStatement的扩展,用于调用存储过程: ```java CallableStatement cs = conn.prepareCall("{ call PROC_NAME(?, ?) }"); ``` 这里的`PROC_NAME`是存储过程的名称,`?`是...
### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL程序,可以接受输入参数,执行一系列操作,并返回结果或输出参数。它们可以提高应用程序的性能、安全性和复用性。在Oracle...
se();}if(stmt != null){stmt.close();}if(conn != null){conn.close();...此外,对于存储过程的错误处理,通常需要在Oracle存储过程中添加异常捕获和处理机制,以便在Java调用时能够得到清晰的错误信息。
根据提供的文件信息,我们可以归纳出以下关于Java调用Oracle存储过程的关键知识点: ### 一、Java连接Oracle数据库 为了能够调用Oracle存储过程,首先需要建立Java程序与Oracle数据库之间的连接。这通常通过JDBC...
通过以上内容可以看出,Java调用存储过程不仅限于简单的输入输出参数,还可以涉及复杂的查询逻辑,甚至返回结果集或游标。这种灵活性使得Java开发人员能够在应用程序中更有效地利用数据库资源,提高数据处理效率。
首先定义参数映射和结果映射,然后在存储过程中指定这些映射,最后调用存储过程并处理返回的游标数据。这种机制为Java应用程序提供了强大的数据库交互能力,尤其是在处理大量数据和复杂查询场景下。 iBatis通过其...
### JAVA调用存储过程知识点详解 #### 一、概述 在Java编程中,经常需要与数据库进行交互,其中一种常用的方式就是通过Java程序来调用数据库中的存储过程。存储过程可以提高应用程序性能,并且能够更好地控制对数据...
本篇文章将详细探讨如何在iBatis中调用Oracle的函数和存储过程,尤其是处理IN和OUT参数以及游标的场景。 首先,我们需要了解iBatis的基本工作原理。iBatis是一个SQL映射框架,它允许开发者将SQL语句写在XML配置文件...
以上就是使用Java调用Oracle存储过程的方法,包括处理基本类型返回值和游标返回值。在实际开发中,可能还需要处理异常、事务管理等问题,确保代码的健壮性和可维护性。同时,为了提高性能,建议使用连接池管理数据库...
在Java中,我们通常使用JDBC(Java Database Connectivity)API来调用存储过程。以下是关键步骤: 1. **加载驱动**:首先,我们需要加载Oracle的JDBC驱动。例如,如果你使用ojdbc.jar,可以在程序中添加如下代码: ...
4. 使用Java的JDBC API调用这些存储过程,处理返回的游标结果。 这种技术在需要在应用程序中分批处理大量数据或者需要动态构建查询结果时非常有用。通过游标,我们可以灵活地控制对数据库的访问,同时避免一次性...
总的来说,Java调用Oracle存储过程主要依赖于`CallableStatement`接口,它允许我们定义输入参数、输出参数以及输入/输出参数,并且可以处理存储过程的返回值。在处理返回值时,需要根据存储过程的返回类型选择合适的...
然后,我们可以创建一个OracleCursorResultTest类来调用存储过程并处理返回的Cursor: ```java import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; ...