Oracle集合

集合是一种复合的数据类型,可以用来表示不同数据之间的关联.
集合类型:
联合数组
嵌套表
变长数组

一:联合数组

1.1创建联合数组
DECLARE 
     TYPE 联合数组类型 IS TABLE OF 数据类型 [NOT NULL]
          INDEX BY BINARY_INTEGER;
     联合数组类型变量 联合数组类型;

1.2填充联合数组
--声明联合数组
DECLARE name_type IS TABLE OF table.name%TYPE
     INDEX BY BINARY_INTEGER;
     tmp_name  name_type;


--填充数组
begin
     tmp_name(1) := 'a';
     tmp_name(3) := 'c';
end;

注意:
1.联合数组无序
2.tmp_name(1) 代表数组第一个元素
3.元素个数受 BINARY_INTEGER 数据类型的取值范围所决定

1.3调用联合数组

调用数组之前,先给数组赋值

DECLARE 
   TYPE item IS TABLE OF VARCHAR(20)
     INDEX BY BINARY_INTEGER;
   tmp item;           --定义
BEGIN
     FOR i IN 1..5 LOOP
          tmp(i) := i*10;    --赋值
     END LOOP;
     FOR i IN 1..5 LOOP
          DBMS_OUTPUT.PUTLINE(tmp(i));   --调用
     END LOOP;
END;

注意:
1.调用非联合数组的元素会报错
2.不可以在定义表的时候使用联合数组这种数据类型

二:嵌套表 Nested table

一维结构体
可以在定义表的时候使用嵌套表这种数据类型

2.1创建嵌套表

与联合数组不同的是: 没有 INDEX BY 关键字

TYPE name IS TABLE OF type [NOT NULL];

--定义嵌套数组并且初始化值

DECLARE TYPE data IS TABLE OF VARCHAR(20);

     tmp_data data := data('a','b','c');   

注意:
1.嵌套表声明变量类型的时候如果没有赋值就默认NULL,并且只读,无法添加元素
2.嵌套表元素个数无限制

2.2重新指定元素

步骤:
1.声明嵌套数组的时候一定要只读元素个数,并且给赋一些值
2.通过 名称(索引) := ‘值’ 这样后期赋值

2.3嵌套表元素序列

有序

2.4非空约束

NOT NULL

2.5在表列中使用嵌套表

三:变长数组

元素个数有限制

3.1创建变长数组
DECLARE TYPE arr IS VARRY(7) OF VARCHAR2(10); --(7)就是限制数组长度
     data arr := arr('1','2','3','4');

3.2在表列中使用变长数组

四:操作集合

4.1查询

describe …

4.2集合类型转换

cast()
可以把变长数组转成嵌套数组,反之亦然,等…

五:集合属性

count()判断数组元素个数
exists()判断是否存在
first()
last()
limit()返回集合最大元素个数,而嵌套表没有限制,所以返回null
next()返回指定位置的下一个元素
prior()返回指定位置的上一个元素

六:集合方法

delete() 带参表示删除指定元素,不带参表示删除所有元素,两个参数表示删除指定范围的元素
extend()将元素加入集合末端只针对嵌套表和可变数组,因为联合数组太随意
不带参数:加null
带一个参数:将n个null加入末端
带两个参数:将x个y元素添加到集合末端
trim()删除末端元素
不带参:删除末端一个元素
带参:删除指定个数(指定个数小于集合元素个数)

七:集合操作符

SET 可以把嵌套表的元素传入,可以消除嵌套表的重复内容
MULTISET UNION[DISTINCT] 可以传递两个嵌套表数据,加上distinct可以去重
MULTISET INTERSECT 将两个嵌套表的共同内容返回并赋值给另外一个嵌套表并去重
MULTISET EXCEPT 找出嵌套表1 中存在但嵌套表2中不存在的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值