`
哇哈哈852
  • 浏览: 92072 次
文章分类
社区版块
存档分类
最新评论

Oracle 方法返回集合类型[table]

阅读更多


以scott.emp 为例,根据职位(MGR)编号,查出该职位编号的所有信息

先创建类型:
相当于每一行记录的类型 可以理解为 scott.emp%rowtype
1.CREATE OR REPLACE TYPE my_record IS OBJECT(
EMPNO NUMBER(4) ,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2)
)

2. CREATE OR REPLACE TYPE mtab IS TABLE OF my_record;
可以理解为 mtab集合里每一行的记录类型为my_record.,相当于my_record类型记录的集合,也就是表(table)

3.
方法一: 使用 bulk collect into 一次性插入到集合变量里
CREATE OR REPLACE FUNCTION fn_test1(num VARCHAR2)
RETURN mtab
IS
mytab mtab;
BEGIN
SELECT my_record(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) BULK COLLECT INTO mytab FROM scott.emp WHERE mgr=num;
RETURN mytab;
END;

注意:
my_record(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) 如果写成EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO 会报 “没有足够的值” 错误。强制类型一致就没问题了。

方法二: 以集合下标的方式
CREATE OR REPLACE FUNCTION fn_test2(num VARCHAR2)
RETURN mtab
IS
mytab mtab:=mtab();--object 对象类型
BEGIN
FOR i IN (SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO FROM scott.emp WHERE mgr=num)
LOOP
mytab.EXTEND();
mytab(mytab.COUNT):=my_record(i.EMPNO,i.ENAME,i.JOB,i.MGR,i.HIREDATE,i.SAL,i.COMM,i.DEPTNO);
END LOOP;
RETURN mytab;
END;

方法三:以管道方式
CREATE OR REPLACE FUNCTION fn_test3(num VARCHAR2)
RETURN mtab Pipelined --使用管道方式
IS
BEGIN
FOR i IN (SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO FROM scott.emp WHERE mgr=num)
LOOP
PIPE ROW(my_record(i.EMPNO,i.ENAME,i.JOB,i.MGR,i.HIREDATE,i.SAL,i.COMM,i.DEPTNO)); --- PIPE ROW 一行一行插入
END LOOP;
RETURN; --这里不需要返回值,只需要写return就OK。
END;
  • 大小: 51.5 KB
分享到:
评论

相关推荐

    Java调用oracle函数返回oracle类(类似)集合

    在Java中调用Oracle函数并处理返回的Oracle特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...

    oracle nested table demo

    嵌套表是一种特殊类型的集合类型,允许在一个列中存储一组行,这些行可以是同一种类型的数据。本示例“Oracle Nested Table Demo”将向我们展示如何在Oracle数据库中创建、操作和使用嵌套表。 嵌套表的定义: 在...

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

    首先,我们需要理解Oracle中的结构化数组,也称为复合类型或集合类型。Oracle提供了两种主要类型的集合:索引数组(PL/SQL TABLE)和关联数组(PL/SQL INDEX BY TABLE)。在本示例中,假设我们定义了一个名为`MY_...

    Oracle Procedurl返回数据集的方式总结

    - **记录类型**: 另一种方法是定义一个记录类型,该类型与REF CURSOR返回的列结构匹配,然后返回一个包含此记录类型的表类型。这样,调用者可以直接遍历返回的记录集合。 5. **游标的使用和关闭** 调用者在获取...

    oracle sql集合

    ### Oracle SQL 集合知识点详解 #### 一、Oracle 安装完成后的初始口令 在Oracle数据库安装完成后,存在一系列预设的账号及其初始密码。这些账号对于数据库的安全性和管理至关重要。以下是一些常见账号及其初始口令...

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.docx

    ### Oracle集合类型输出参数的PL/SQL存储过程及其Java调用 #### 1. 引言 存储过程因其高效执行、事务处理能力以及安全性,在数据库应用程序中被广泛应用。特别是使用Oracle数据库时,PL/SQL(一种专为Oracle设计的...

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.doc

    Oracle集合类型输出参数的PL/SQL存储过程及Java调用主要涉及如何在Oracle数据库中使用存储过程处理集合数据,并在Java应用中调用这些过程。本文档介绍了一种使用索引表作为输出参数的方法,以及如何在Java中处理返回...

    MLDN Oracle SQL语句集合

    《MLDN Oracle SQL语句集合》是一份集成了Oracle数据库管理系统中SQL语言核心知识点的珍贵资料,主要来自于MLDN的Oracle视频讲座。这份笔记详细记录了在实际操作Oracle数据库时可能会遇到的各种SQL语句,旨在帮助...

    sql – Oracle中匿名TABLE/VARRAY类型示例详解

    另一方面,TABLE类型是一种无固定大小的集合类型,也称为嵌套表。它可以动态地存储任意数量的元素,但不像VARRAY那样保证元素顺序。例如: ```sql CREATE TYPE STRINGS AS TABLE OF VARCHAR2(100); ``` 这创建了一...

    Oracle中实现Split函数功能

    这个函数使用了 Oracle 的管道化函数(pipelined function)来返回拆分后的结果。函数内部使用了一个循环来拆分字符串,每次循环都会将拆分后的结果返回给调用者。 最后,我们可以使用这个函数来拆分字符串。例如,...

    ORACLE子程序及TABLE类型用法等[收集].pdf

    综上,Oracle子程序和TABLE类型的使用极大地增强了PL/SQL的灵活性和功能性,使得在Oracle数据库环境中开发高效、可靠的业务逻辑成为可能。通过合理利用这些特性,开发者可以构建出强大且易于维护的数据库应用程序。

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

    在处理数组参数时,Oracle提供了PL/SQL TABLE类型的参数,Java可以通过数组或Java Collection类型传递。在返回集合时,可以将结果集映射到Java集合对象,如ArrayList或自定义的实体类,这样可以更好地适应业务需求。...

    oracle常用命令集合(一)

    ### Oracle常用命令集合详解 #### 1. 修改表结构 - **添加字段**: `ALTER TABLE 表名 ADD 字段名 数据类型;` - 示例:`ALTER TABLE employees ADD phone VARCHAR2(20);` - **说明**:此命令用于向现有表中添加新...

    Oracle知识之集合和成员函数.pptx

    可变数组(Variable-Size Arrays)是另一种集合类型,它允许动态调整数组的大小。与固定大小的PL/SQL表相比,可变数组提供了更大的灵活性。虽然它们与嵌套表有许多相似之处,比如结构和元素访问方式,但在存储和管理...

    ORCL数据库相关文档.rar_ORCL数据集合_Oracle命令集合_busy7dm_globewxf_oracle

    在"ORCL数据库相关文档.rar"这个压缩包中,我们可以找到一系列关于Oracle数据库的重要资料,尤其是"Oracle命令集合"部分,它涵盖了Oracle数据库管理和操作的各种常见命令。 首先,创建实例是Oracle数据库管理的基础...

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

    首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并返回结果。临时表(也称为全局临时表)是只在当前会话中可见的表,数据在会话结束时自动删除。在存储...

    oracle常用查询语句示例

    本篇文章将基于"oracle常用查询语句示例"这一主题,深入探讨在Oracle中执行多表查询和单表中复杂查询的方法。 首先,我们来看单表查询。在Oracle中,基础的SELECT语句用于从单个表中检索数据。例如: ```sql ...

    ORACLE操作代码(集合)

    在Oracle数据库中,创建表的基本语法为`CREATE TABLE 表名 (列定义)`。例如: ```sql CREATE TABLE test ( mydate DATE ); ``` 这里创建了一个名为`test`的表,其中包含一个类型为`DATE`的字段`mydate`。接着可以...

    利用函数返回oracle对象表的三种方法

    `t_test_table`是`t_test`对象类型的集合,即一个对象表类型,可以用来存储多个`t_test`对象实例。 接下来,我们将介绍三种不同的方法来创建返回`t_test_table`的函数: ### 1. 使用数组返回 ```sql CREATE OR ...

Global site tag (gtag.js) - Google Analytics