PL/SQL 中支持定义两种复合数据类型:集合类型和记录类型。

复合数据类型存储具有内部元素的值。可以将整个复合变量作为参数传递给子程序,也可以单独访问复合变量的内部元素。内部元素可以是普通标量元素,也可以是另一个复合元素。可以在任何可以使用标量和变量的地方使用复合数据类型的标量元素。也可以在使用相同类型的复合变量的地方使用复合数据类型的复合元素。
在集合类型中,内部元素始终具有相同的数据类型。可以通过集合变量的唯一索引访问集合变量的每个元素,PL/SQL语法为:variable_name(index)(即变量名(索引))。要创建集合变量,需要先定义集合类型,然后创建该类型的变量,或者使用%TYPE 创建。
PL/SQL中包含三种集合类型,其特点如下:
关联数组
是一组键值对,每个键都是唯一索引,用于定位值。
无需指定元素数量,元素密度不定。
未初始化时为空集合,无构造函数。
可在块和包中定义,不可作为非关联数组的其他复合类型元素。
定义语法:TYPE变量名 IS TABLE OF元素类型 INDEX BY 索引类型
元素按照索引顺序排序,索引可以是非整形。
声明常量时,需要创建函数为常量初始化。
适用于查找相对较小的表,用于临时数据存储。
可变数组
是一个数组,元素数从零到声明的最大值之间,大小不等。
需指定最大元素数量,元素密度密集。
未初始化时为NULL集合,使用构造函数或非空赋值初始化。
可在块、包和模式中定义,模式中可作为复合类型元素。
定义语法:TYPE变量名 IS VARRAY OF元素类型
元素按创建顺序排序,且与索引顺序保持一致。
必须同时存储或检索索引元素。
适用于按序访问且已知元素最大数量的情况。
只能与NULL比较
嵌套表
可以不指定顺序存储未指定数量的行的类型。
无需指定元素数量,元素密度先密集后可能稀疏。
未初始化时为NULL集合,使用构造函数或非空赋值初始化。
可在块、包和模式中定义,模式中可作为复合类型元素。
定义语法:TYPE变量名 IS TABLE OF元素类型
元素可以动态的增加或减少。
两个相等的嵌套表可以元素顺序不同。
只能与NULL比较

2. 集合 的使用方法
在PL/SQL中,集合类型使用包括以下几个要点:
(1)集合类型及其变量声明:在PL/SQL块的声明部分DECLARE中声明一个集合类型及其变量,例如:
\set SQLTERM /
DECLARE
   --声明一个元素类型为INT,索引类型为TEXT的关联数组类型a1
TYPE a1 IS TABLE OF INT INDEX BY TEXT;
--声明一个关联数组类型a1的变量
Va1 a1;
--声明一个元素类型为INT,最大元素个数为10的可变数组类型v1
  TYPE v1 IS VARRAY(10) OF INT;
  --声明一个可变数组类型v1的变量
Vv1 v1;
--声明一个元素类型为INT的嵌套表类型n1
TYPE n1 IS TABLE OF INT;
--声明一个嵌套表类型n1的变量
Vn1 n1;
BEGIN
  NULL;
END;
/

(2)集合类型变量初始化:在PL/SQL中,集合类型变量的初始化分为两种情况,其中关联数组的初始化可以只能对其进行赋值初始化,需要在可执行部分BEGIN中进行。而可变数组与嵌套表还可以使用同名的构造函数进行初始化,需要在声明部分进行。例如:
\set SQLTERM /
DECLARE
TYPE a1 IS TABLE OF INT INDEX BY TEXT;
Va1 a1;
 
  TYPE v1 IS VARRAY(10) OF INT;
Vv1 v1;
Vv1 := v1(1,2,3); --可变数组初始化,使用构造函数
 
TYPE n1 IS TABLE OF INT;
Vn1 n1;
Vn1 := n1(2,4,6) --嵌套表初始化,使用构造函数
BEGIN
  Va1(‘X’) := 10; --关联数组初始化
END;
/

(3)使用多维集合:集合只有一个维度,但可以通过使集合的元素为另一个集合来构造一个多维集合。下面是一个示例,展示了如何构建一个二维集合
\set SQLTERM /
DECLARE
  TYPE a1 IS VARRAY(10) OF INT;
v2 a1 := a1(1,2);
--声明一个元素为INT可变数组a1的关联数组a2
  TYPE a2 IS TABLE OF a1 INDEX BY PLS_INTEGER;
  v1 a2;
BEGIN
    v2(1) := v1;
    v2(2) := v1; --初始化二维关联数组
  raise notice 'v1(1)=%',v1(1);
  raise notice 'v1(2)=%',v1(2);
  raise notice '-----';
  raise notice 'v2(1)(1)=%',v2(1)(1);
  raise notice 'v2(2)(1)=%',v2(2)(1);
END;
/
--输出
NOTICE:v1(1)=1
NOTICE:v1(2)=2
-----
NOTICE:v2(1)(1)=1
NOTICE:v2(2)(1)=1
需要注意的是,关联数组只能作为关联数组的元素,不可作为其他集合类型的元素。而可变数组与嵌套表可以互相作为对方的元素。
3. 总结
本文介绍了PL/SQL中集合类型的概念,和基本使用方法。通过学习集合类型的相关知识,你可以同时处理多个数据,实现更复杂的数据操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值