PL 提供了类似数组的数据结构, 可以存储相同类型的元素的固定大小顺序集合,用于存储有序的数据集合。
数组由连续的内存位置组成。最低的地址对应于第一个元素,而最后一个元素的地址最高。
如下例所示,可以用命令行创建一个数组类型:
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>;
如下例所示,可以在 PL 块中动态创建一个数组类型:
TYPE varray_type_name IS VARRAY(n) of <element_type>;
varray_type_name 是数组类型的名称, n 为元素数量,element_type 为元素类型。
obclient> DECLARE
-> TYPE alpha IS TABLE OF VARCHAR2(1);
-> l alpha := alpha('A', 'B', 'C', 'D');
-> BEGIN
-> FOR i IN l.FIRST .. l.LAST LOOP
-> DBMS_OUTPUT.PUT_LINE(l(i));
-> END LOOP;
-> DBMS_OUTPUT.PUT_LINE('-');
-> END;
-> /
Query OK, 0 rows affected (0.05 sec)
A
B
C
D
-
数组和嵌套表的区别如下:
嵌套表和数组的基本结构很类似,但是两者在用法上有区别。
- 数组在定义的时候需要指定长度,嵌套表不需要,嵌套表可以动态扩展。
- 数组是连续的,元素被删除之后,数组下标会移动。 嵌套表在初始化的时候是连续的,但是元素被删除后,下标并不移动,被删除的空元素仍旧占位。