可变数组(varray,variable array 的缩写)是存储有序元素的集合,所有元素都具有相同的数据类型,且每个元素的索引对应元素在该数组中的位置。可变数组存在大小的限制,可以动态进行更改。当创建 VARRAY 时,必须指定 VARRAY 数组的最大长度。OceanBase 根据其数组长度大小在行数据或 LOB 中存储数组对象。
创建 VARRAY 数组时,OceanBase 不会为它分配空间。它定义了一种类型用来声明:
- 关系表的列的数据类型
- 对象类型属性
- PL/SQL 变量,参数或函数返回类型
创建可变数组的简单语法格式如下:
TYPE varray_name IS VARRAY( size ) OF element_type [ NOT NULL ] ;
其中,varray_name是 VARRAY 数据类型的名称;size 是正整数,表示能够容纳的数组元素的最大数量;每一个元素的数据类型是 element_type;默认情况下,元素能够取空值,否则需要使用 NOT NULL 加以限制。
示例:创建可变数组
obclient> set serveroutput on;
delimiter /
DECLARE
TYPE Foursome IS VARRAY(4) OF VARCHAR2(15);
team Foursome := Foursome('John', 'Mary', 'Alberto', 'Juanita');
PROCEDURE print_team (heading VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(heading);
FOR i IN 1..4 LOOP
DBMS_OUTPUT.PUT_LINE(i || '.' || team(i));
END LOOP;
DBMS_OUTPUT.PUT_LINE('---');
END;
BEGIN
print_team('2001 Team:');
team(3) := 'Pierre';
team(4) := 'Yvonne';
print_team('2005 Team:');
team := Foursome('Arun', 'Amitha', 'Allan', 'Mae');
print_team('2009 Team:');
END;
/
2001 Team:
1.John
2.Mary
3.Alberto
4.Juanita
---
2005 Team:
1.John
2.Mary
3.Pierre
4.Yvonne
---
2009 Team:
1.Arun
2.Amitha
3.Allan
4.Mae
obclient> delimiter ;