以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特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...
嵌套表是一种特殊类型的集合类型,允许在一个列中存储一组行,这些行可以是同一种类型的数据。本示例“Oracle Nested Table Demo”将向我们展示如何在Oracle数据库中创建、操作和使用嵌套表。 嵌套表的定义: 在...
首先,我们需要理解Oracle中的结构化数组,也称为复合类型或集合类型。Oracle提供了两种主要类型的集合:索引数组(PL/SQL TABLE)和关联数组(PL/SQL INDEX BY TABLE)。在本示例中,假设我们定义了一个名为`MY_...
- **记录类型**: 另一种方法是定义一个记录类型,该类型与REF CURSOR返回的列结构匹配,然后返回一个包含此记录类型的表类型。这样,调用者可以直接遍历返回的记录集合。 5. **游标的使用和关闭** 调用者在获取...
### Oracle SQL 集合知识点详解 #### 一、Oracle 安装完成后的初始口令 在Oracle数据库安装完成后,存在一系列预设的账号及其初始密码。这些账号对于数据库的安全性和管理至关重要。以下是一些常见账号及其初始口令...
### Oracle集合类型输出参数的PL/SQL存储过程及其Java调用 #### 1. 引言 存储过程因其高效执行、事务处理能力以及安全性,在数据库应用程序中被广泛应用。特别是使用Oracle数据库时,PL/SQL(一种专为Oracle设计的...
Oracle集合类型输出参数的PL/SQL存储过程及Java调用主要涉及如何在Oracle数据库中使用存储过程处理集合数据,并在Java应用中调用这些过程。本文档介绍了一种使用索引表作为输出参数的方法,以及如何在Java中处理返回...
《MLDN Oracle SQL语句集合》是一份集成了Oracle数据库管理系统中SQL语言核心知识点的珍贵资料,主要来自于MLDN的Oracle视频讲座。这份笔记详细记录了在实际操作Oracle数据库时可能会遇到的各种SQL语句,旨在帮助...
另一方面,TABLE类型是一种无固定大小的集合类型,也称为嵌套表。它可以动态地存储任意数量的元素,但不像VARRAY那样保证元素顺序。例如: ```sql CREATE TYPE STRINGS AS TABLE OF VARCHAR2(100); ``` 这创建了一...
这个函数使用了 Oracle 的管道化函数(pipelined function)来返回拆分后的结果。函数内部使用了一个循环来拆分字符串,每次循环都会将拆分后的结果返回给调用者。 最后,我们可以使用这个函数来拆分字符串。例如,...
综上,Oracle子程序和TABLE类型的使用极大地增强了PL/SQL的灵活性和功能性,使得在Oracle数据库环境中开发高效、可靠的业务逻辑成为可能。通过合理利用这些特性,开发者可以构建出强大且易于维护的数据库应用程序。
在处理数组参数时,Oracle提供了PL/SQL TABLE类型的参数,Java可以通过数组或Java Collection类型传递。在返回集合时,可以将结果集映射到Java集合对象,如ArrayList或自定义的实体类,这样可以更好地适应业务需求。...
### Oracle常用命令集合详解 #### 1. 修改表结构 - **添加字段**: `ALTER TABLE 表名 ADD 字段名 数据类型;` - 示例:`ALTER TABLE employees ADD phone VARCHAR2(20);` - **说明**:此命令用于向现有表中添加新...
可变数组(Variable-Size Arrays)是另一种集合类型,它允许动态调整数组的大小。与固定大小的PL/SQL表相比,可变数组提供了更大的灵活性。虽然它们与嵌套表有许多相似之处,比如结构和元素访问方式,但在存储和管理...
在"ORCL数据库相关文档.rar"这个压缩包中,我们可以找到一系列关于Oracle数据库的重要资料,尤其是"Oracle命令集合"部分,它涵盖了Oracle数据库管理和操作的各种常见命令。 首先,创建实例是Oracle数据库管理的基础...
首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并返回结果。临时表(也称为全局临时表)是只在当前会话中可见的表,数据在会话结束时自动删除。在存储...
本篇文章将基于"oracle常用查询语句示例"这一主题,深入探讨在Oracle中执行多表查询和单表中复杂查询的方法。 首先,我们来看单表查询。在Oracle中,基础的SELECT语句用于从单个表中检索数据。例如: ```sql ...
在Oracle数据库中,创建表的基本语法为`CREATE TABLE 表名 (列定义)`。例如: ```sql CREATE TABLE test ( mydate DATE ); ``` 这里创建了一个名为`test`的表,其中包含一个类型为`DATE`的字段`mydate`。接着可以...
`t_test_table`是`t_test`对象类型的集合,即一个对象表类型,可以用来存储多个`t_test`对象实例。 接下来,我们将介绍三种不同的方法来创建返回`t_test_table`的函数: ### 1. 使用数组返回 ```sql CREATE OR ...