关联数组
功能描述
关联数组也称索引表,是一组key-value
键值对,每个key都是一个唯一索引。Vastbase支持在PL/SQL中定义关联数组类型,以及定义和使用关联数组变量,并支持关联数组元素的赋值与访问。
关联数组的使用中支持如下函数和过程:
方法 | 类型 | 描述 |
---|---|---|
first | 函数(function) | 对于索引为 PLS_INTEGER 的关联数组,first 为最小的索引值。对于以字符串为索引的关联数组,first 为最低键值元素。 |
last | 函数(function) | 对于索引为 PLS_INTEGER 的关联数组,last 为最大的索引值。对于以字符串为索引的关联数组,last为最高键值元素。 |
delete | 过程(procedure) | 从关联数组中删除元素,有三种形式。 |
prior | 函数(function) | 返回指定索引之前的索引。对于按字符串索引的关联数组,上一个索引由按排序顺序的键值确定。 |
next | 函数(function) | 返回指定索引之后的索引。对于按字符串索引的关联数组,下一个索引由按排序顺序的键值确定。 |
函数和过程的使用方法为assoc_array_name.method
,其中assoc_array_name为关联数组。
注意事项
- 暂不支持关联数组作为独立的类型,其作为pl/pgsql内部类型,权限依赖pl/pgsql自定义函数、存储过程、包和包体的访问权限。
- 当前版本暂不支持not null或null选项。
- 关联数组排序索引暂不支持 binary_integer,long,type_attribute,rowtype_attribute,string。
语法格式
TYPE type_name is table of datatype [[not] null] index by
{
PLS_INTEGER |
BINARY_INTEGER |
VARCHAR |
VARCHAR2(v_size) |
LONG |
STRING |
type_attribute |
rowtype_attribute
};
参数说明
type_name
关联数组名称。
datatype
数据类型,可以是常用数据类型varchar、varchar2、number、interger、pls_integer、binary_integer以及自定义数据类型,不支持REF CURSOR和NCLOB类型。
null或者not null
可选项,对关联数组的每个元素可为空或加非空约束。当前版本暂不支持该选项。
index
index的数据类型如语法格式中所展示的类型。当前版本仅支持varchar2,varchar,pls_integer。
v_size
字节长度大小。
示例
示例1:定义一个关联数组。
CREATE OR REPLACE FUNCTION Fun() RETURNS int AS $$
DECLARE
TYPE ARRAY_INTEGER IS TABLE OF int index by varchar(20); --定义类型
ARRINT ARRAY_INTEGER; --定义变量
BEGIN
ARRINT('TOM') := 99; --通过变量下标给数组赋值
RETURN ARRINT['TOM']; --返回数组元素
END;
$$
LANGUAGE plpgsql;
返回结果如下,表示支持定义关联数组:
CREATE FUNCTION
示例2:在关联数组中使用函数,当索引类型为PLS_INTEGER时获取最大索引值。
CREATE OR REPLACE FUNCTION fun3() RETURNS VOID AS $$
DECLARE
Type aa_int_type IS TABLE OF int2 INDEX BY pls_integer;
aa_int aa_int_type;
BEGIN
aa_int(1) := 3;
aa_int(7) := 6;
aa_int(5) := 12;
raise info 'LAST=%',aa_int.LAST;
END;
$$
LANGUAGE plpgsql;
select fun3();
返回结果如下,获取到最大索引值:
INFO: LAST=7
CONTEXT: referenced column: fun3
fun3
------
(1 row)