oracle的集合一共有三种:1.关联数组;2.嵌套数组;3.VARRAY(可变长度数组)
1.关联数组
其定义语法是:type 数组名称 is table of 元素类型 index by 索引类型.
索引类型可以是varchar2类型和pls_integer类型.例如:
declare
--定义一个关联数组类型
type student_list is table of student%rowtype index by pls_integer;
--声明关联数组变量
student_list_var student_list;
--定义一个游标
cursor student_cursor is
select * from student;
begin
--循环游标,其中student_index相关于基于游标的记录
for student_index in student_cursor
loop
--其中id是表student的列number类型,以下是记录之间的赋值.个人认为关联数组和java中的功能map很像
student_list_var(student_index.id) := student_index;
end loop;
2.嵌套数组
语法:type 数组名称 is table of 元素类型
例如:
--定义一个名字数组
type list_of_name is table of varchar2(100);
--定义一个学生数组,其中student为表
type list_of_student is table of student%rowtype;
使用示例:
--创建一个嵌套数组
create type student_table is table of student%rowtype;
--定义一个根据学生姓名查询学生列表的函数
create or replace of function list_studect(student_name in student.name%type) return student_table is
--根据学生姓名查询学生列表游标
cursor student_cursor(student_name in student.name%type) is
select * from student where name like student_name||'%';
--声明基于表的学生记录
student_var student%rowtype;
--声明一个嵌套数组变量
student_table_var student_table;
--声明拓展嵌套数组的下标
index_var pls_integer := 0;
begin
--初始化嵌套数组
student_table_var =: student_table();
--循环游标
for cur_index in student_cursor(student_name)
loop
--拓展嵌套数组
student_table_var.extend;
--下标以1开始,时,嵌套数组是非稀疏的
index_var := index_var + 1;
--赋值
student_table_var(index_var) := cur_index;
end loop;
return student_table_var;
end;
3.VARRAY(可变长度数组)
语法:type 数组名称 is varray(数组长度) of 元素类型
例如:
--定义一个名字可变长度数组
type list_of_name is varray(100) of varchar2(100);
--定义一个学生可变长度数组,其中student为表
type list_of_student is varray(500) of student%rowtype;
VARRAY的使用和嵌套表差不多,唯一的区别是VARRAY是有长度限制的.
他们的区别如下图所示:
属性 | 关联数组 | 嵌套表 | varray |
纬度 | 一维 | 一维 | 一维 |
是否可用于SQL | 不可用 | 可用 | 可用 |
是否可作为表中列的数据类型 | 不可用 | 可用 | 可用 |
为初始化的状态 | 空(不能是NULL)元素是未定义 | 自动是NULL,对元素的引用是非法的 | 自动是NULL,对元素的引用是非法的 |
初始化 | 在声明时自动完成 | 通过构造函数,或者赋值,或者fetch操作完成 | 通过构造函数,或者赋值,或者fetch操作完成 |
是否稀疏 | 是 | 开始不是;经过删除后就是了 | 不是 |
是否有界 | 无界 | 可以扩展 | 不是 |
可以随时对任意一个元素赋值 | 可以 | 不可以,可以需要先用extend进行扩展 | 不可以;可以需要先用extend进行扩展,而且extend扩展时不能超过上边界 |
扩展方法 | 给一个新下标指向的元素赋值 | 使用extend过程(或者trim进行压缩),没有预定义的最大值 | extend(或trim),但是最大只能到声明的最大尺寸 |
可以比较相等与否 | 不可以 | 可以,要求是oracle10g或以后版本 | 不可以 |
是否通过集合操作符进行操作 | 不可以 | 可以,要求是oracle10g或以后版本 | 不可以 |
存取数据时是否会保留顺序或者下标 | N/A | 不保留 | 保留 |
下一篇会写写Spring如果将数组传人Oracle中
分享到:
相关推荐
Oracle 集合操作函数 union、intersect、minus Oracle 集合操作函数是用于合并多条 SELECT 语句的结果的函数,包括 UNION、INTERSECT、MINUS 等。这些函数可以将多个查询结果合并成一个结果集,以便进一步处理和...
Oracle 集合操作详解 Oracle 集合操作是指在数据库中对数据进行集合运算的操作,包括 union、union all、intersect 和 minus 等操作。这些操作可以对数据进行合并、交叉、差异等处理,提高数据处理效率。 union ...
### Oracle集合类型输出参数的PL/SQL存储过程及其Java调用 #### 1. 引言 存储过程因其高效执行、事务处理能力以及安全性,在数据库应用程序中被广泛应用。特别是使用Oracle数据库时,PL/SQL(一种专为Oracle设计的...
Oracle集合类型输出参数的PL/SQL存储过程及Java调用主要涉及如何在Oracle数据库中使用存储过程处理集合数据,并在Java应用中调用这些过程。本文档介绍了一种使用索引表作为输出参数的方法,以及如何在Java中处理返回...
本资源涵盖知识(包括使用案例):Oracle集合运算,交集、并集、补集、差集. 集合运算就是将多个结果集组合成一个结果集。
### Oracle SQL 集合知识点详解 #### 一、Oracle 安装完成后的初始口令 在Oracle数据库安装完成后,存在一系列预设的账号及其初始密码。这些账号对于数据库的安全性和管理至关重要。以下是一些常见账号及其初始口令...
### Oracle PL/SQL 集合详解 #### 12.1 集合概述 在深入了解Oracle PL/SQL中的集合之前,先回顾一下与集合相关的概念和术语,包括不同集合类型的描述及其示例。 ##### 12.1.1 集合概念和术语 **元素和索引值** -...
Oracle数据库系统提供了多种数据类型,其中包括了三种主要的集合数据类型:VARRAY(变量数组)、NESTED TABLE(嵌套表)和 Associative Array(关联数组,也称为INDEX BY TABLE)。这三种集合数据类型在存储和操作一...
本教程的"Oracle高级教程-深入学习集合"将详细阐述以上各个主题,并提供丰富的示例和练习,帮助读者熟练掌握Oracle集合的使用,进一步提升数据库管理与开发的专业水平。通过阅读并实践,你将能够更好地应对复杂的...
Oracle集合是PL/SQL编程中的一个重要概念,它们允许程序员存储一组相关的数据,这些数据可以是同类型的。集合有两种主要类型:VARRAY(变量数组)和嵌套表。 VARRAY是一种固定大小的集合,其大小在创建时就已经确定...
这是有关oracle的集合,供大家分享,虽然有很多错误,但也供大家讨论。
学Oracle的好东西,适合初学者,集合了大部分基本操作命令的实现
oracle 创建表空间和用户; oracle job的创建及相关命令; oracle 触发器或存储过程中执行外部exe程序; oracle 导入导出; oracle 删除所有表的数据; sqlserver 读取excel
在Oracle数据库管理中,经常会遇到各种错误,本文主要讨论了三个常见的Oracle错误及其解决方案。 首先,关于用户和修改用户密码的问题。Oracle数据库默认有一些预设的用户名和密码,例如Scott/tiger,System/...
oracle 常用命令_oracle 命令大全_oracle命令集合_oracle基本命令 非常方便,带查询功能,能很方便的查询你要找的oracle命令写法
在"ORCL数据库相关文档.rar"这个压缩包中,我们可以找到一系列关于Oracle数据库的重要资料,尤其是"Oracle命令集合"部分,它涵盖了Oracle数据库管理和操作的各种常见命令。 首先,创建实例是Oracle数据库管理的基础...
"oracle日常巡检命令集合" Oracle日常巡检命令集合是数据库管理员最重要的工具之一,通过这些命令,可以检查数据库的状态、性能和安全性。以下是oracle日常巡检命令集合的详细说明: 检查数据库基本状况 1.1. ...
在Java中调用Oracle函数并处理返回的Oracle特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...
Oracle资料大全集合是一个涵盖Oracle数据库系统方方面面的综合资源包,对于学习、研究或者工作中需要处理Oracle相关问题的人员来说,是一份极其宝贵的参考资料。Oracle,作为全球广泛使用的大型关系型数据库管理系统...
6. **oci8_collection.c**:提供了对Oracle集合类型的支持,允许在PHP中操作Oracle的数组类型数据。 7. **CREDITS**:列出oci8扩展开发和贡献者的名单,体现了开源社区的协作精神。 8. **oci8.dsp**:可能是Visual...