PL 提供了类似数组的数据结构, 可以存储相同类型的元素的固定大小顺序集合,用于存储有序的数据集合。

    数组由连续的内存位置组成。最低的地址对应于第一个元素,而最后一个元素的地址最高。

    如下例所示,可以用命令行创建一个数组类型:

    1. CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>;

    如下例所示,可以在 PL 块中动态创建一个数组类型:

    1. TYPE varray_type_name IS VARRAY(n) of <element_type>

    varray_type_name 是数组类型的名称, n 为元素数量,element_type 为元素类型。

    1. obclient> DECLARE
    2. -> TYPE alpha IS TABLE OF VARCHAR2(1);
    3. -> l alpha := alpha('A', 'B', 'C', 'D');
    4. -> BEGIN
    5. -> FOR i IN l.FIRST .. l.LAST LOOP
    6. -> DBMS_OUTPUT.PUT_LINE(l(i));
    7. -> END LOOP;
    8. -> DBMS_OUTPUT.PUT_LINE('-');
    9. -> END;
    10. -> /
    11. Query OK, 0 rows affected (0.05 sec)
    12. A
    13. B
    14. C
    15. D
    16. -

    数组和嵌套表的区别如下:

    嵌套表和数组的基本结构很类似,但是两者在用法上有区别。

    • 数组在定义的时候需要指定长度,嵌套表不需要,嵌套表可以动态扩展。
    • 数组是连续的,元素被删除之后,数组下标会移动。 嵌套表在初始化的时候是连续的,但是元素被删除后,下标并不移动,被删除的空元素仍旧占位。