PL/SQL语言的集合类似于数组,是管理多行数据必须的结构体。集合就是列表,可能有序,也可能无序。PL/SQL的集合类型有:联合数组、嵌套表和可变数组三种。
1、联合数组
联合数组类似于C语言中的数组。
(1)语法格式如下:
type typeName
is table of arrayType index by binary_integer;
其中,typeName表示新类型的类型名,arrowType表示要定义的联合数组的类型。
假设有一个表t_module(name varchar(20)),那么我们可以针对其name字段建立如下联合数组:
type moduleName is table of t_module.name%type index by binary_integer;
(2)元素赋值
示例代码如下:
declare
type NameArray
is table of varchar(20) index by binary_integer; /*定义联合数组NameArrow*/
na NameArray; /*声明联合数组NameArrow的一个变量*/
begin
na(1) := 'Hello'; /*给联合数组赋值*/
na(2) := 'World'; /*给联合数组赋值*/
na(5) := 'Oracle'; /*给联合数组赋值*/
dbms_output.put_line(na(1) || na(2));
end;
注意:
a.联合数组中的元素不是按特定顺序排列的,元素的下标也是可以无序的,所以nameArrow(-100) := 'Hello'也是可以的。
b.index的数据类型是binary_integer类型,所以index的范围为-214483647~+214483647。
c.当调用不存在的元素时将会出错。
2、嵌套表
嵌套表的声明和联合数组的声明十分类似。语法格式如下:
type typeName is table of arrayType [not null]
嵌套表的声明与联合数组的唯一不同是没有index by binary_integer子句。
(1)嵌套表的初始化
嵌套表的初始化和联合数组的初始化是不同的。在声明了联合数组之后,再声明一个联合数组对应的变量,如果此时没有给该变量赋值,那么该变量对应的联合数组就是一个空的,在以后的语句中还可以给该联合数组添加元素;而如果在声明了嵌套表变量时没有初始化,则该嵌套表将自动初始化为null,并且是只读的。如果在后续代码中继续向该嵌套表中添加元素,就会报错,但是可以修改已经存在的元素的值。
以下是一个嵌套表的初始化示例:
declare
type NameArray is table of varchar(20);
na NameArray := NameArray('ZhangSan', 'LiSi', 'WangWu'); /*在声明的时候即初始化该嵌套表*/
begin
for nameIndex in 1..3 loop
dbms_output.put_line(na(nameIndex));
end loop;
end;
(2)元素序列
嵌套表与联合数组十分相似,只是嵌套表在结构上是有序的,而联合数组是无序的。嵌套表元素的index是从1开始递增的。
3、可变数组
先来看可变数组的语法格式:
type typeName is varray | varying array(maximunSize) of arrayType [not null]
maximunSize是指可变数组的最大值,arrayType表示数组元素的类型。
可变数组的可变是指当定义了数组的最大容量后,数组元素的个数可在这个范围内进行变动。
与嵌套表一样,可变数组也需要初始化,在初始化后也只能修改已经存在的元素值,初始化时赋值的数量必须不超过最大容量。
以下是一段示例代码:
declare
type NameArray is varray(10) of varchar(20);
na NameArray := NameArray('ZhangSan', 'LiSi', 'WangWu');
begin
for nameIndex in 1..3 loop
dbms_output.put_line(na(nameIndex));
end loop;
end;
4、集合的属性和方法
(1)count属性
count属性用于返回集合中数组元素的个数。
示例代码:
na.count; /*在上面例子中调用该语句将返回3*/
(2)delete方法
delete方法用于删除集合中的一个或多个元素。由于delete方法删除的是固定位置的元素,所以对应可变数组来说是没有
delete方法的。delete方法有3中形式:
delete:不带参数的delete方法将删除整个集合。
delete(index):将删除集合中第index个位置的元素。
delete(start, end):将删除集合中从start到end的元素。
注意:
a.执行delete方法后,集合的count值将会立即发生改变。
b.执行delete操作后,其他元素的index不会发生改变。
c.当要删除的元素不存在时,delete不会报错,而是跳过该元素,继续执行下一操作。
(3)exists方法
exists方法用于判断集合中指定位置的元素是否存在。
语法格式如下:
exists(index);
如果index位置的元素存在即返回true,否则就是false,如果index大于集合的最大范围,则返回false。
(4)extend方法
extend方法用于将元素添加到集合的末端,由于联合数组的随意性,所以该方法不能对联合数组使用,有以下几种形式:
extend:不带参数的extend方法将添加一个null元素到集合的末端
extend(n):将添加n个null元素到集合的末端。
extend(n, x):将添加n个x位置的元素到集合的末端。
(5)first属性和last属性
first属性用于返回集合中的第一个元素所在的位置,last属性用于返回集合中的最后一个元素所在的位置。
(6)limit属性
limit属性用于返回集合的最大容量,该属性只有对可变数组才有返回值,对其他的则返回null。
(7)next方法和prior方法
next方法和prior方法都有一个表示index的参数,语法格式为:
next(index);
prior(index);
next(index)返回集合中index后一个元素的位置,而prior(index)方法则返回集合中index位置前一个元素的位置,如果对应返
回的位置不存在则返回null。
(8)trim方法
trim方法用于从集合的末端删除元素,由于联合数组的随意性,所以不能对联合数组使用trim方法,有以下两种形式:
trim:不带参数的trim从集合末端删除一个元素。
trim(n):从集合末端删除n个元素,其中n不能超出集合的count数。
分享到:
相关推荐
Oracle会尝试将IN操作符转换为多表连接查询,若转换失败,则需先执行子查询获取值集合,再对外层表进行查询。这一额外的转换步骤可能导致性能下降。对于复杂的查询,尤其是涉及分组和统计的场景,IN操作符的转换机制...
Oracle数据库使用集合运算符来完成对多个数据集进行操作的复合查询。 在SQL语言中,最基本的集合运算符包括UNION、UNION ALL、INTERSECT和MINUS。每个运算符都有其特定的用途和规则: 1. UNION运算符:此运算符...
Oracle实例则是后台进程和内存结构的集合,主要负责数据库的管理、并发访问控制和数据完整性维护。 Oracle实例中的关键内存结构包括系统全局区(SGA)和程序全局区(PGA)。SGA是一个共享内存区域,其中包含了数据...
### Oracle经典教程1——走进Oracle #### Oracle简介 Oracle是一种基于对象的关系型数据库管理系统,它由美国甲骨文公司开发并维护。Oracle数据库系统因其高度可靠性和强大的数据处理能力而闻名,广泛应用于各种...
### Oracle经典教程6——Oracle应用于.NET平台 #### 一、回顾ADO.NET ADO.NET(ActiveX Data Objects .NET)是一套面向对象的类库集合,主要用于.NET Framework中的应用程序与各种数据源进行交互。通过ADO.NET,...
ARRAY类型在Oracle中用于存储固定大小的数组,而TABLE类型则更灵活,可以存储变长的行集合,类似于临时表。这两种数据类型在处理大量数据时非常有用,因为它们避免了多次单条插入操作,提升了效率。 在Java中,我们...
在Oracle学习笔记的第五天中,主要探讨了数据库中的连接查询、子查询、集合操作以及SQL注入防范等重要概念。 首先,连接查询是数据库操作的基础,用于将两个或多个表的数据结合在一起。在示例中,我们看到了三种...
本套“Oracle大学培训资料——Oracle9i 数据库管理基础 I(中文版)”旨在为初学者提供全面而深入的Oracle数据库管理基础知识,帮助读者掌握基本的数据库概念、安装配置以及日常维护技能。 在Oracle9i版本中,...
4. 存储过程:预编译的SQL语句集合,用于执行复杂的业务逻辑。 5. 触发器:在特定数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行的代码。 6. 权限和角色:用于控制用户对数据库资源的访问权限。 在实践中,...
### Oracle经典教程5——PLSQL程序设计:深入解读与应用 #### 一、PL/SQL:Oracle的强大武器 ##### 1.1 PL/SQL简介 PL/SQL(Procedural Language for SQL)是Oracle数据库特有的过程化编程语言,它将SQL的强大力量...
Oracle教程——深入浅出Oracle学习资料 Oracle数据库系统是全球广泛应用的关系型数据库管理系统,由甲骨文公司(Oracle Corporation)开发。本教程旨在为初学者和有经验的IT专业人士提供全面、深入的Oracle知识,...
数据库系统原理与应用——Oracle版主要探讨的是数据库的基础概念、数据库系统、数据模型以及关系数据库和关系代数。这一领域对于理解Oracle数据库的管理和应用至关重要。 1. 数据库基本知识: - 数据和信息的区别...
#### 第13章:数据并发性和一致性 - **13.1 多用户环境下数据并发性和一致性简介** - 在多用户环境中,确保数据的并发性和一致性是至关重要的。 - **13.2 Oracle管理数据并发性和一致性原理** - Oracle通过锁定...
数据查询的基本语法是从数据库中选取满足特定条件的记录,生成一个数据记录集合,然后将这些记录存储到数据记录集对象中。 2. **简单查询**: - **选择所有列**:`SELECT * FROM SCOTT.Goods` 会选取Goods表中的...
本教程“Oracle 11g 从入门到精通——第十二章”通过五个视频深入讲解了Oracle数据库在用户、角色和权限方面的核心概念及操作,旨在帮助初学者快速掌握数据库管理的基础知识。 首先,视频教程的第一部分是“创建与...
Oracle融合中间件11g是Oracle公司在2008年完成对BEA的收购后首次推出的完整中间件产品集合,旨在实现全面、开放和集成的目标。这个版本的发布标志着Oracle在中间件领域的重大进步,它整合了Oracle原有的产品线与BEA...