VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

兼容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;