变长数组是一种元素数量可以从零到声明的最大长度的数组。
语法
TYPE type_name IS VARRAY '(' number ')' OF datatype [NULL | NOT NULL] ';'
示例
变长数组的基本示例如下所示:
DECLARE
TYPE varray_type IS VARRAY(10) OF INT; -- 声明 varray 局部类型
v varray_type := varray_type(); -- 创建变量, 并将它初始化为空
BEGIN
v.extend(1); -- 扩建它的大小, 之后允许在索引为1的位置上赋值和取值
v(1) := 1; -- 赋值
RAISE NOTICE '%', v(1); -- 取值
END;
结果显示如下:
NOTICE: 1
DO
该语法指定了您创建的类型名称、变长数组的最大长度和元素类型。您可以使用该类型创建变量。以下是创建变长数组变量的一个示例:
DECLARE
TYPE varray_type IS VARRAY(10) OF INT; -- 声明 varray 局部类型
v varray_type; -- 创建变量但不初始化, 此时状态为 NULL
v varray_type := varray_type(); -- 创建变量, 并将它初始化为空,实际长度为0
v varray_type := varray_type(1, 2); -- 创建变量, 并初始化两个元素, 实际长度为2
BEGIN
END;
您必须通过extend
方法或是直接在初始化时分配出对应的位置,然后才可以对该位置进行赋值和取值。变长数组的索引下标的下界为1,上界为当前存储的元素个数。存储的元素个数不能超过设定的最大值。如果您试图分配超过最大长度的位置,PL/SQL会出现如下错误:
DECLARE
TYPE varray_type IS VARRAY(10) OF INT;
v varray_type := varray_type();
BEGIN
v.extend(11); -- 分配11个位置
END;
结果显示如下:
ERROR: new varray size: 11 must be smaller than limit size: 10
CONTEXT: SQL statement "CALL v.extend(11)"
PL/SQL function inline_code_block line 5 at CALL
元素类型可以是普通类型(例如,int,varchar等),也可以是记录类型。
DECLARE
TYPE record_type IS RECORD(id INT, name VARCHAR(10));
TYPE varray_type IS VARRAY(10) OF record_type;
v varray_type := varray_type();
BEGIN
v.extend(1);
v(1).id := 1;
v(1).name := 'a';
RAISE NOTICE '% %', v(1).id, v(1).name;
END;
结果显示如下:
NOTICE: 1 a
DO
文档内容是否对您有帮助?