`
神仙公社
  • 浏览: 9083 次
社区版块
存档分类
最新评论

使用oracle 存储过程返回集合

阅读更多

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存储过程中使用临时表的替代方案 

 

 

 

 

分享到:
评论

相关推荐

    Oracle存储过程返回结果集

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

    C#中调用oracle存储过程返回数据集

    在C#中调用Oracle存储过程来返回数据集是一个常见的任务,这涉及到ADO.NET库的使用,特别是OracleClient组件。Oracle存储过程是数据库中的预编译SQL代码块,可以接收输入参数,执行复杂的业务逻辑,并返回结果。在C#...

    Delphi中调用oracle的存储过程返回数据集

    在 Delphi 中调用 Oracle 的存储过程返回数据集需要遵循一定的规则和格式,包括创建 Oracle 包和存储过程、使用 AdoConnection 和 AdoDataSet 组件连接到 Oracle 数据库、调用存储过程并返回数据集等步骤。

    oracle存储过程返回多行多列的结构化数组,java调用并解析

    总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...

    hibernate query调用oracle存储过程

    以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....

    使用OLE-DB和ADO调用返回记录集的Oracle存储过程.docx

    "使用OLE-DB和ADO调用返回记录集的Oracle存储过程" 摘要:本文介绍了如何使用OLE DB和ADO调用返回记录集的Oracle存储过程。OLE DB是一个开放规范,提供了对不同类型数据的访问和操纵标准。ADO是OLE DB的消费者,...

    oracle存储过程常用技巧

    Oracle存储过程常用技巧 Oracle存储过程是一种强大的数据库对象,它可以帮助开发者简化复杂的业务逻辑,并提高数据库的安全性和性能。在 Oracle 中,存储过程是一种特殊的 PL/SQL 程序,它可以接受输入参数,执行...

    Java调用带参数的存储过程并返回集合

    本话题将详细讲解如何使用Java调用带有参数的Oracle存储过程,并获取存储过程返回的集合。 首先,Oracle存储过程是一种预编译的SQL语句集合,它可以在数据库服务器端执行,提高性能,减少网络传输。`PROCEDURE.sql`...

    oracle 存储过程 函数 dblink

    在这段Java代码中,我们使用了`CallableStatement`来调用Oracle存储过程`TESTA`。关键点包括: - `prepareCall`方法用于准备调用存储过程。 - 使用`setString`方法设置输入参数的值。 - 调用`execute`方法执行存储...

    Oracle 存储过程资料集合

    这个“Oracle 存储过程资料集合”显然是一份珍贵的学习资源,其中可能包含了关于如何创建、调用和管理Oracle存储过程的各种文档、教程和示例。 在Oracle数据库中,存储过程是由一个或多个SQL语句和PL/SQL块组成的...

    Springboot调用Oracle存储过程的几种方式.docx

    执行`execute()`后,可以获取存储过程的返回结果。 3. **通过`ProcedureCall`接口:** 另一种方式是使用`ProcedureCall`接口,它提供了一种更灵活的方式来调用存储过程。首先,我们需要通过`ProcedureCall`创建一...

    oracle 事务 回滚 存储过程

    ### Oracle存储过程 存储过程是在数据库中预编译的一组SQL语句,用于执行复杂的业务逻辑或数据操作。它们可以接受输入参数,执行一系列数据库操作,并返回结果。在Oracle中,存储过程使用PL/SQL编写,可以在数据库...

    Java调用oracle存储过程通过游标返回临时表

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    ORACLE存储过程学习源码

    这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,我们将深入探讨存储过程的基本概念、结构、类型,以及如何通过这些源码进行学习。 1. **存储过程的...

    oracle存储过程学习经典

    ### Oracle存储过程学习经典 #### Oracle存储过程基础知识与实践 Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程,并将结果集处理到 `List` 集合中。 对于 `P_EMP_ADD` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程...

    oracle存储过程编写

    总之,Oracle存储过程是提升数据库管理效率的重要工具,掌握其编写和使用技巧对于数据库开发者和管理员至关重要。通过学习和实践,我们可以利用存储过程来优化业务逻辑,提高系统的稳定性和性能。

    关于oracle存储过程的基本语法

    ### Oracle存储过程基础语法详解及注意事项 #### 一、Oracle存储过程概述 Oracle存储过程是一种在Oracle数据库中存储的一段可执行的SQL代码或PL/SQL代码,它可以帮助开发人员实现复杂的业务逻辑处理,提高应用程序...

    oracle存储过程超详细使用手册

    3. **调用过程**:调用已创建的过程通常使用`EXECUTE`关键字,或者在PL/SQL块中直接使用过程名,如`过程名(参数列表);`。 4. **参数**:存储过程可以接受输入参数(IN),输出参数(OUT),或者输入输出参数(IN ...

Global site tag (gtag.js) - Google Analytics