兼容PL/pgSQL-TYPE … IS TABLE OF (INDEX BY …)
功能描述
支持在PL/pgSQL中定义嵌套表类型,以及定义和使用嵌套表变量,并支持嵌套表元素的赋值以及访问。
支持在PL/pgSQL中定义关联数组类型,以及定义和使用关联数组变量,并支持关联数组元素的赋值与访问。
语法格式
(1)嵌套表
TYPE typename IS TABLE OF datatype;
typename:嵌套表类型的名称。
datatype:数组元素支持Vastbase数据类型包括数值、字符、时间以及自定义类型,不支持REF CURSOR和NCLOB类型。
赋值与访问嵌套表变量,访问的下标类型是整型数字下标。
(2)关联数组
TYPE typename IS TABLE OF datatype INDEX BY subtype;
typename:类型名称。
datatype:数组元素支持Vastbase数据类型包括数值、字符、时间以及自定义类型,不支持REF CURSOR和NCLOB类型。
subtype:数组下标的类型,目前支持varchar2,varchar2(n),varchar,varchar(n),pls_integer(整型数字)。
赋值与访问关联数组变量,访问的下标类型可以是整型数字(INDEX BY PLS_INTEGER),varchar以及varchar2类型下标。
注意
嵌套表不支持初始化赋值,直接对数组赋值而不初始化数组。
嵌套表的数组会自动增长,访问越界会返回一个NULL,不会报错。
嵌套表在存储过程中定义的数组类型,其作用域仅在该存储过程中。
示例
该功能使用需要有函数创建权限。
(1)定义嵌套表及赋值与访问嵌套表变量
CREATE OR REPLACE FUNCTION Fun() RETURNS int AS $$
DECLARE
TYPE ARRAY_INTEGER IS TABLE OF int; --定义类型
ARRINT ARRAY_INTEGER; --定义变量
BEGIN
ARRINT[1] := 1; --通过常量下标给数组赋值
FOR I IN 2..16 LOOP
select I into ARRINT[I] from dual; --通过变量下标给数组赋值
END LOOP;
RETURN ARRINT[2];
END;
$$
LANGUAGE plpgsql;
(2)定义关联数组赋值与访问关联数组变量
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;