Oracle 三种集合数据类型的比较

Oracle 三种集合数据型的比

 

PL/SQL中没有数的概念,他的集合数据型和数是相似的。在7.3以前的版本中只有一种集合,称PL/SQL表,在之后又有两种集合数据:嵌套表和varray。其中varray集合中的元素是有数量限制的,index_by表和嵌套表是没有个限制的。index-by表是稀疏的,也就是可以不连续varray型的集合密的,他的下没有隔。index_by表不能存在数据中,但是嵌套表和varray可以被存在数据中。

 

集合在使用先使用type行定方可使用

1.index_by

type type_name is table of element_type [NOT NULL] index by binary_integer

2.嵌套表

type type_name is table of element_type [NOT NULL]

3.varray

type type_name is [varray ¦varying array](max_size) of element_type[NOT NULL]

 

一,index_by

TYPE TYPE1 IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;

1.使用的候需要先赋值取,至少也要先初期化一下,否会出异常:ORA-01403: no data found

2.种数不需要事先指定上限,下可以不连续,可以是0

例:v1 TYPE1;

v1(-1) := '-1';
v
1(0) := '0
';
v
1(1) := '1
';
DBMS_OUTPUT.put_line(
v1(-1));       --访问合法

DBMS_OUTPUT.put_line(v1(2));        --访问非法

   

二,嵌套表

TYPE TYPE2 IS TABLE OF VARCHAR2(10);

1.须进行初期化,否会出异常:ORA-06531: Reference to uninitialized collection

2.初期化方法:

v1 TYPE2 := TYPE2();                   --声明初期化数组为

v2 TYPE2 := TYPE2('1','2','3','4','5');        --声明初期化数组为5个元素

v1 := TYPE2();                         --初期化后数组为

v2 := TYPE2('1','2','3','4','5');      --初期化后数组为5个元素

3.元素的访问

1开始,不能超所有元素的和,当下超出允围时,出异常:ORA-06532: Subscript outside of limit

    不能访问空数,所以空数合,必须进行数组扩展。

    例:v1.EXTEND;

    V1(1):= ‘1’;                  --访问合法

    v1(2):= ‘2’;                  --访问非法,之前必再次v1.EXTEND;

    例:v2的下15

    v2(5):= ‘Hello’;              --访问合法

    DBMS_OUTPUT.put_line(v2(6));    --访问非法

 

三,Varray

TYPE TYPE3 IS ARRAY(5) OF VARCHAR2(10);

由于型定义时的元素个数限制,所以TYPE3量在使用时最大的元素个数不能超过5个。

嵌套表基本相同(略)

 

四,

集合内建函数

 

方法           描述                                                                            使用限制
COUNT      返回集合中元素的个数
DELETE     删除集合中所有元素
DELETE()  删除元素下标为x的元素,如果x为null,则集合保持不变          对VARRAY非法
DELETE(,) 删除元素下标从X到Y的元素,如果X>Y集合保持不变             对VARRAY非法
EXISTS()   如果集合元素x已经初始化,则返回TRUE, 否则返回FALSE
EXTEND    在集合末尾添加一个元素                                                  对Index_by非法
EXTEND() 在集合末尾添加x个元素                                                    对Index_by非法
EXTEND(,) 在集合末尾添加元素n的x个副本                                        对Index_by非法
FIRST       返回集合中的第一个元素的下标号,对于VARRAY集合始终返回1。
LAST        返回集合中最后一个元素的下标号,对于VARRAY返回值始终等于COUNT.
LIMIT       返回VARRY集合的最大的元素个数,对于嵌套表和Index_by为null Index_by集合无用
NEXT()     返回在元素x之后及紧挨着它的元素的值,如果该元素是最后一个元素,则返回null.
PRIOR()   返回集合中在元素x之前紧挨着它的元素的值,如果该元素是第一个元素,则返回null。
TRIM       从集合末端开始删除一个元素                                              对于index_by不合法
TRIM()     从集合末端开始删除x个元素                                               对index_by不合法

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值