1 所谓返回集合是返回游标
集合可以不使用临时表,使用oracle自定义类型
2 可以先建一个object的type,再建一个type 类型为table
如:CREATE OR REPLACE TYPE Dis_WGM_dayreport_type as object(
queryday date, --查询的某天
reporttype VARCHAR2(20), -
station VARCHAR2(32),
stationcode VARCHAR2(120),
......
)
CREATE OR REPLACE TYPE Dis_WGM_dayreport_records AS TABLE OF Dis_WGM_dayreport_type
3 在存储过程中定义
v_record Dis_WGM_dayreport_type;
v_temp Dis_WGM_dayreport_records:=Dis_WGM_dayreport_records();
4 然后在存储过程中对其进行赋值
----v_tempYear_szm_fy为record type的集合
vN := v_tempYear_szm_fy.First;
For varR In vN .. v_tempYear_szm_fy.count Loop
v_record := Dis_WGM_dayreport_type(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null);
v_record.meizhong := v_tempYear_szm_fy(vN).meizhong;
v_temp.Extend;
v_temp(vN) := v_record;
DBMS_OUTPUT.PUT_LINE(vN || ' ' || v_tempYear_szm_fy(vN).meizhong ||
' ' || v_tempYear_szm_fy(vN).ls || ' ' || v_tempYear_szm_fy(vN).ds);
vN := v_tempYear_szm_fy.Next(vN);
End Loop;
5 最后返回
Open retcur For
select * from table(v_temp);
6 存储过程定义为
create or replace package PKG_DIS_WGM as
procedure GETDAYREPROT(P_QUERYDAY in date, retcur out Sys_refcursor);
--获取日报表
Type DIS_WGM_Q_INFO Is record(
station VARCHAR2(32),
meizhong VARCHAR2(32),
ls NUMBER(5, 0),
ds NUMBER(12, 2)
);
Type DIS_WGM_Q_INFO_RECORD IS TABLE OF DIS_WGM_Q_INFO INDEX BY BINARY_INTEGER;
end PKG_DIS_WGM;
7 as和is区别,record和object区别
可以参考 oracle 自定义类型 type / create type
8其他知识
-- 批量给Dis_WGM_dayreport_records插入数据
Select Dis_WGM_dayreport_type(.....)
Bulk collect into v_temp
From T_Test
在定义record集合的时候
Type DIS_WGM_Q_INFO_RECORD IS TABLE OF DIS_WGM_Q_INFO INDEX BY BINARY_INTEGER;
红色字体表示增加记录时,不必每次都做 Extend操作了
参考
http://www.cnblogs.com/advocate/p/3729998.html
oracle 自定义类型 type / create type
http://blog.csdn.net/lee576/article/details/7207217
相关推荐
本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...
在C#中调用Oracle存储过程来返回数据集是一个常见的任务,这涉及到ADO.NET库的使用,特别是OracleClient组件。Oracle存储过程是数据库中的预编译SQL代码块,可以接收输入参数,执行复杂的业务逻辑,并返回结果。在C#...
在 Delphi 中调用 Oracle 的存储过程返回数据集需要遵循一定的规则和格式,包括创建 Oracle 包和存储过程、使用 AdoConnection 和 AdoDataSet 组件连接到 Oracle 数据库、调用存储过程并返回数据集等步骤。
总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...
以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....
"使用OLE-DB和ADO调用返回记录集的Oracle存储过程" 摘要:本文介绍了如何使用OLE DB和ADO调用返回记录集的Oracle存储过程。OLE DB是一个开放规范,提供了对不同类型数据的访问和操纵标准。ADO是OLE DB的消费者,...
Oracle存储过程常用技巧 Oracle存储过程是一种强大的数据库对象,它可以帮助开发者简化复杂的业务逻辑,并提高数据库的安全性和性能。在 Oracle 中,存储过程是一种特殊的 PL/SQL 程序,它可以接受输入参数,执行...
本话题将详细讲解如何使用Java调用带有参数的Oracle存储过程,并获取存储过程返回的集合。 首先,Oracle存储过程是一种预编译的SQL语句集合,它可以在数据库服务器端执行,提高性能,减少网络传输。`PROCEDURE.sql`...
在这段Java代码中,我们使用了`CallableStatement`来调用Oracle存储过程`TESTA`。关键点包括: - `prepareCall`方法用于准备调用存储过程。 - 使用`setString`方法设置输入参数的值。 - 调用`execute`方法执行存储...
这个“Oracle 存储过程资料集合”显然是一份珍贵的学习资源,其中可能包含了关于如何创建、调用和管理Oracle存储过程的各种文档、教程和示例。 在Oracle数据库中,存储过程是由一个或多个SQL语句和PL/SQL块组成的...
执行`execute()`后,可以获取存储过程的返回结果。 3. **通过`ProcedureCall`接口:** 另一种方式是使用`ProcedureCall`接口,它提供了一种更灵活的方式来调用存储过程。首先,我们需要通过`ProcedureCall`创建一...
### Oracle存储过程 存储过程是在数据库中预编译的一组SQL语句,用于执行复杂的业务逻辑或数据操作。它们可以接受输入参数,执行一系列数据库操作,并返回结果。在Oracle中,存储过程使用PL/SQL编写,可以在数据库...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,我们将深入探讨存储过程的基本概念、结构、类型,以及如何通过这些源码进行学习。 1. **存储过程的...
### Oracle存储过程学习经典 #### Oracle存储过程基础知识与实践 Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储...
对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程,并将结果集处理到 `List` 集合中。 对于 `P_EMP_ADD` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程...
总之,Oracle存储过程是提升数据库管理效率的重要工具,掌握其编写和使用技巧对于数据库开发者和管理员至关重要。通过学习和实践,我们可以利用存储过程来优化业务逻辑,提高系统的稳定性和性能。
### Oracle存储过程基础语法详解及注意事项 #### 一、Oracle存储过程概述 Oracle存储过程是一种在Oracle数据库中存储的一段可执行的SQL代码或PL/SQL代码,它可以帮助开发人员实现复杂的业务逻辑处理,提高应用程序...
3. **调用过程**:调用已创建的过程通常使用`EXECUTE`关键字,或者在PL/SQL块中直接使用过程名,如`过程名(参数列表);`。 4. **参数**:存储过程可以接受输入参数(IN),输出参数(OUT),或者输入输出参数(IN ...