一复合数据类型概述
PL/SQL 有两种复合数据结构:记录和集合。记录有不同的域组成,集合由不同的元素组成。在PL/SQL 中集合在定
义的时候必须使用TYPE 语句,然后才是创建和使用这种类型的变量。
集合类型: 变长数组( VARRAY ),嵌套表( NESTED_TAB) ,关联数组(索引表---INDEX_BY );其实也可以分为两
种,索引表是嵌套表的的拓展。
三种类型的相似处:
- 都是一维的类似数组的结构
- 都是内建的方法
- 访问由点分割
三种类型的不同处:
- 数据绑定:数据绑定涉及到集合中元素数量的限制,变长数组集合中的元素是的数量是有限制的,索引表和嵌套表则没有限制。
- 稀疏性:稀疏性描述了集合的下标是否有间隙,索引表总是稀疏的;嵌套表开始是紧密的,但如果元素被删除了嵌套表可以是稀疏的,可以说嵌套表是相对于疏松;变长数组类型的集合是紧密的,它的下标之间没有间隔。
- 存储方式:索引表不能存储在数据库中,但嵌套表和变长数组表可以被存储在数据库中。
索引表
索引表集合的定义语法如下: TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY BINARY_INTE
RGET; 这里面最重要的关键字是INDEX BY BINARY_INTERGET ,没有这个关键字,那么集合将是一个嵌套表, element_ty
pe 可以是任何合法的PL/SQL 数据类型----(PLS/INTEGER ,SIGNTYPE 和BOOLEAN )。其他的集合类型对数据库的数据
类型都有限制,但索引表不能存储在数据库中,所以没有这些限制。
一旦定义了索引表,就可以向创建其他变量那样创建索引表的变量:如:
declare
type test_tab1 is table of varchar2(50) index by binary_integer;
v_test_tab test_tab1;
begin
复合类型的循环方法
Lv_Index := Pt_Cols_Tbl.First;
LOOP
exit when Lv_Index is null;
Pt_Cols_Tbl(Lv_Index);
Lv_Index := Pt_Cols_Tbl.Next(Lv_Index);
END LOOP;
方法描述使用限制
COUNT 返回集合中元素的个数
DELETE 删除集合中所有元素
DELETE() 删除元素下标为x 的元素,如果x 为null, 则集合保持不变对VARRAY 非法
DELETE(,) 删除元素下标从X 到Y 的元素,如果X>Y 集合保持不变对VARRAY 非法
EXISTS() 如果集合元素x(指下标或称为key值) 已经初始化,则返回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 之后及紧挨着它的元素的值(指下标或称为key值),如果该元素是最后一个元素,则返回null.
PRIOR() 返回集合中在元素x 之前紧挨着它的元素的值,如果该元素是第一个元素,则返回null 。
TRI M 从集合末端开始删除一个元素对于index_by 不合法
TRIM() 从集合末端开始删除x 个元素对index_by 不合法