`
lilongping269
  • 浏览: 43936 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Oracle数据库存储过程---在存储过程中返回结果集

 
阅读更多
我们使用存储过程都是返回值都是单一的,有时我们需要从过程中返回一个集合。即多条数据。这有几种解决方案。比较简单的做法是写临时表,但是这种做法不灵活。而且维护麻烦。我们可以使用嵌套表来实现.没有一个集合类型能够与java的jdbc类型匹配。这就是对象与关系数据库的阻抗吧。数据库的对象并不能够完全转换为编程语言的对象,还必须使用关系数据库的处理方式。

create or replace package procpkg is
   type refcursor is ref cursor;
   procedure procrefcursor(p varchar2, p_ref_postypeList  out refcursor);
end procpkg;

create or replace package body procpkg is
  procedure procrefcursor(p varchar2, p_ref_postypeList out  refcursor)
  is
    v_posTypeList PosTypeTable;
  begin
    v_posTypeList :=PosTypeTable();--初始化嵌套表
    v_posTypeList.extend;
    v_posTypeList(1) := PosType('A001','客户资料变更');
    v_posTypeList.extend;
    v_posTypeList(2) := PosType('A002','团体资料变更');
    v_posTypeList.extend;
    v_posTypeList(3) := PosType('A003','受益人变更');
    v_posTypeList.extend;
    v_posTypeList(4) := PosType('A004','续期交费方式变更');
    open p_ref_postypeList for  select * from table(cast (v_posTypeList as PosTypeTable));
  end;
end procpkg;

在包头中定义了一个游标变量,并把它作为存储过程的参数类型。
在存储过程中定义了一个嵌套表变量,对数据写进嵌套表中,然后把嵌套表进行类型转换为table,游标变量从这个嵌套表中进行查询。外部程序调用这个游标。
所以这个过程需要定义两个类型。
create or replace type PosType as Object (
  posType varchar2(20),
  description varchar2(50)
);

注意:对于游标变量,不能使用for循环来处理。因为for循环会隐式的执行open动作。而通过open for来打开的游标%isopen是为true的。也就是默认打开的。Open一个已经open的游标是错误的。所以不能使用for循环来处理游标变量。
分享到:
评论

相关推荐

    Oracle存储过程返回结果集

    在Oracle数据库中,存储过程是一种预编译的SQL和PL/SQL代码集合,可以执行复杂的业务逻辑或数据处理任务。当需要从存储过程中返回多个结果时,通常会使用结果集。本篇将深入探讨如何在Oracle存储过程中创建并返回一...

    Oracle通用数据库存储过程代码--高效分页存储过程

    ### Oracle通用数据库存储过程代码——高效分页存储过程解析 ...以上存储过程的实现不仅提供了一个高效、灵活的分页查询方案,还通过参数化的形式增强了其可复用性和扩展性,非常适合在Oracle数据库环境中应用。

    oracle的存储过程如何返回结果集

    通过以上介绍,我们可以看到,在Oracle数据库中,存储过程可以通过Ref Cursor来返回结果集。这种方式不仅提高了数据处理的效率,还增强了代码的可维护性和可读性。在实际应用中,合理地设计存储过程和使用Ref Cursor...

    Oracle数据库---存储过程实例

    在Oracle数据库中,存储过程是一种数据库对象,它由SQL语句和流程控制语句组成,并存储在数据库服务器上。当需要执行特定任务时,可以通过调用存储过程来实现。存储过程的优点包括提高性能(因为它们可以在服务器端...

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

    Delphi 中调用 Oracle 的存储过程返回数据集是指在 Delphi 应用程序中调用 Oracle 数据库中的存储过程,并将存储过程的返回结果集显示在 Delphi 应用程序中。这种方式可以将 Oracle 数据库中的数据实时同步到 Delphi...

    Oracle数据库管理--创建数据库.pptx

    Oracle数据库管理是指对Oracle数据库进行管理和维护的过程。创建数据库是Oracle数据库管理的重要一步骤,本章节将详细介绍创建数据库的步骤和要点。 一、数据库规划 数据库规划是创建数据库的第一步骤。数据库规划...

    Oracle数据库实用指南-赵元杰编著

    ### Oracle数据库实用指南知识点概述 #### 一、Oracle数据库概览 - **Oracle数据库系统**:本书主要介绍了Oracle 8i/9i版本的数据库,这些版本提供了强大的数据管理和处理能力,适合各种规模的企业级应用。 - **...

    oracle 数据库 plsql 存储过程

    **Oracle存储过程**是一种可以在Oracle数据库中存储并可被多次调用的PL/SQL代码块。它由一系列的PL/SQL语句组成,可以包含控制流程、变量声明等,能够执行复杂的数据库操作。存储过程具有以下优点: - **提高性能**...

    用Java编写Oracle数据库存储过程

    在实际开发中,你可能还需要处理异常、参数传递、结果集返回等问题。Oracle提供了一系列的API和包,如`DBMS_JAVA`,来帮助管理和优化Java在数据库中的使用。同时,了解Oracle的内存管理和JVM的配置也是确保Java存储...

    Oracle数据库介绍-2008-12-12及介绍Oracle常见的问题

    1. **表空间(Tablespace)**:表空间是Oracle数据库中的逻辑存储单元,用于组织和管理数据文件。一个数据库可以包含多个表空间,而每个表空间由一个或多个数据文件组成。 - **系统表空间(System Tablespace)**:默认...

    Oracle数据库迁移培训-FINAL.ppt

    在Oracle数据库中,存储过程是数据库对象的一种,用于封装复杂的业务逻辑。本篇将重点介绍Oracle存储过程的相关知识。 首先,Oracle存储过程可以分为创建、运行、调试和删除四个主要步骤。创建一个存储过程,通常...

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

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

    oracle数据库的存储结构-.pdf

    - 表空间:是Oracle数据库中最大的逻辑存储单位,用户创建的所有对象(如表、索引等)都会存储在表空间中。表空间分为系统表空间和非系统表空间。系统表空间通常包含SYSTEM(用于管理系统信息)、SYSAUX(存储数据库...

    oracle存储过程-帮助文档

    存储过程是预编译的SQL和PL/SQL代码集合,存储在Oracle数据库中,可以由用户或应用程序按需调用执行。它们提高了数据库性能,因为数据库只需解析和优化存储过程一次,而非每次调用时都进行。 2. **存储过程的分类*...

    Oracle数据库培训资料-PPT

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。这份“Oracle数据库培训资料-PPT”包含了一系列的PPT文件,旨在帮助学习者深入理解和掌握Oracle数据库的相关知识。以下是...

    Oracle数据库存储过程.pdf

    Oracle数据库是关系型数据库管理系统的一种,广泛应用于大型企业级应用中。存储过程和触发器是Oracle数据库中重要的组件,它们是用于封装一系列...这些知识点对于理解和掌握Oracle数据库存储过程具有重要的指导意义。

    Oracle-11g-R2-RAC-with-ASM存储迁移-手记.docx

    1.Oracle RAC 数据库迁移的重要性:随着 business 的发展,数据库的存储需求也在不断增长,如何将数据库迁移到新的存储设备上成为一个重要的课题。 2.ASM 存储迁移的优势:使用 ASM DISKGROUP 的方式可以实现在线...

Global site tag (gtag.js) - Google Analytics