更新时间:2026-10-21 GMT+08:00
分享

数组支持的函数

  • 以下示例为ORA兼容模式下的示例,函数定义说明里[]中的内容代表可选项,如count[()]表示可以写成count或count()。
  • 暂不支持数组未初始化报错(An uninitialized collection is referenced)、数组下标越界报错(Subscript beyond count)、数组下标超限制报错(Subscript outside of limit)。
  • 在内层表达式中,不支持通过嵌套的方式调用数组类型函数。
  • extend(count)、delete(idx)和trim(n)函数的参数只支持单个常量或变量,不支持其他形式的参数,如函数调用、表达式等形式。
  • 当类型嵌套且数组类型作为内部类型时,无参的extend、delete、trim函数只支持extend、delete、trim形式调用,不支持extend()、delete()、trim()形式调用。
  • extend[(count)]

    参数:count为int4类型。

    返回值:无返回值。

    功能描述:在varray变量末尾拓展1个或count个元素,元素默认扩展为NULL。

    示例1:extend,扩展1个元素,默认扩展为NULL。

    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer := array_integer();
    gaussdb-# BEGIN
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     arrint.EXTEND;
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$# END;
    gaussdb$# /
    0
    1
    ANONYMOUS BLOCK EXECUTE

    示例2:extend(count),扩展count个元素,默认扩展为NULL。

    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer := array_integer();
    gaussdb-# BEGIN
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     arrint.EXTEND(3);
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$# END;
    gaussdb$# /
    0
    3
    ANONYMOUS BLOCK EXECUTE
  • extend(count, idx)

    参数:idx和count为INT4类型。

    返回值:无返回值。

    功能描述:在varray变量末尾拓展count个元素,并且扩展元素的值等于给定idx下标元素的值。

    示例:extend(count, idx),扩展第idx位置的元素。

    gaussdb=# SET a_format_version='10c';
    SET
    gaussdb=# SET a_format_dev_version='s1';
    SET
    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer := array_integer(1,2);
    gaussdb-# BEGIN
    gaussdb$#     arrint.EXTEND(2, 1);
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     FOR i IN 1..arrint.COUNT LOOP
    gaussdb$#         DBE_OUTPUT.PRINT_LINE(arrint(i));
    gaussdb$#     END LOOP;
    gaussdb$# END;
    gaussdb$# /
    4
    1
    2
    1
    1
    ANONYMOUS BLOCK EXECUTE
  • count[()]

    参数:无。

    返回值:INT4类型。

    功能描述:返回数组中的元素个数。

    示例:查看已初始化的数组元素个数。

    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer;
    gaussdb-#     len INT;
    gaussdb-# BEGIN
    gaussdb$#     arrint := array_integer(1, 2, 3);
    gaussdb$#     len := arrint.COUNT();
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(len);
    gaussdb$# END;
    gaussdb$# /
    3
    ANONYMOUS BLOCK EXECUTE
  • trim[(n)]

    参数:n为INT4类型。

    返回值:无返回值。

    功能描述:无参数时,删除数组末尾一个元素;给定输入参数n时,删除数组末尾指定数量元素。

    示例:删除数组中的n个元素。

    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer := array_integer(1,2,3);
    gaussdb-# BEGIN
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     arrint.TRIM(1);
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$# END;
    gaussdb$# /
    3
    2
    ANONYMOUS BLOCK EXECUTE
    -- n大于数组元素个数, 清空数组元素
    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer := array_integer(1,2,3);
    gaussdb-# BEGIN
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     arrint.TRIM(4);
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$# END;
    gaussdb$# /
    3
    0
    ANONYMOUS BLOCK EXECUTE
  • delete[()]

    参数:无参数。

    返回值:无返回值。

    功能描述:清空数组中的元素。

    示例:清空数组中的元素。

    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer := array_integer(1,2,3);
    gaussdb-# BEGIN
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     arrint.DELETE();
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$# END;
    gaussdb$# /
    3
    0
    ANONYMOUS BLOCK EXECUTE,数组元素均为NULL
    -- 数组未初始化
    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer;
    gaussdb-# BEGIN
    gaussdb$#     arrint.DELETE();
    gaussdb$# END;
    gaussdb$# /
    ANONYMOUS BLOCK EXECUTE
  • delete(idx)

    参数:INT4类型。

    返回值:无返回值。

    功能描述:给定下标idx在数组范围内,则删除数组中给定下标idx的元素。

    示例1:给定idx下标在数组范围内。

    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer := array_integer(1, 2, 3);
    gaussdb-# BEGIN
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     arrint.DELETE(2);
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     FOR i IN 1..arrint.COUNT LOOP
    gaussdb$#         DBE_OUTPUT.PRINT_LINE(arrint(i));
    gaussdb$#     END LOOP;
    gaussdb$# END;
    gaussdb$# /
    3
    2
    1
    3
    ANONYMOUS BLOCK EXECUTE

    示例2:给定idx下标在数组范围外。

    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer := array_integer(1, 2, 3);
    gaussdb-# BEGIN
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     arrint.DELETE(2);
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     FOR i IN 1..arrint.COUNT LOOP
    gaussdb$#         DBE_OUTPUT.PRINT_LINE(arrint(i));
    gaussdb$#     END LOOP;
    gaussdb$# END;
    gaussdb$# /
    3
    INFO:  {1,2,3}
    ANONYMOUS BLOCK EXECUTE
    
    gaussdb=# DECLARE
    gaussdb-#     TYPE array_integer IS VARRAY(10) OF INTEGER;
    gaussdb-#     arrint array_integer:= array_integer(1, 2, 3);
    gaussdb-#BEGIN
    gaussdb$#     DBE_OUTPUT.PRINT_LINE(arrint.COUNT);
    gaussdb$#     arrint.DELETE(11);
    gaussdb$#     RAISE INFO '%', arrint;
    gaussdb$# END;
    gaussdb$# /
    3
    INFO:  {1,2,3}
    ANONYMOUS BLOCK EXECUTE
  • first[()]

    参数:无。

    返回值:INT4类型。

    功能描述:返回数组中第一个元素的下标,若没有第一个元素,则返回NULL。

    示例:

    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr := varr('asd','zxc');
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'first is %',v.FIRST();
    gaussdb$# END;
    gaussdb$# /
    INFO:  first is 1
    ANONYMOUS BLOCK EXECUTE
    -- 数组未初始化返回NULL
    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr;
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'first is %',v.FIRST;
    gaussdb$# END;
    gaussdb$# /
    INFO:  first is <NULL>
    ANONYMOUS BLOCK EXECUTE
  • last[()]

    参数:无。

    返回值:INT4类型。

    功能描述:返回数组中最后一个元素的下标。若没有最后一个元素,则返回NULL。

    示例:

    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr := varr('asd','zxc');
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'last is %',v.LAST();
    gaussdb$# END;
    gaussdb$# /
    INFO:  last is 2
    ANONYMOUS BLOCK EXECUTE
    -- 数组未初始化返回NULL
    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr;
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'last is %',v.LAST;
    gaussdb$# END;
    gaussdb$# /
    INFO:  last is <NULL>
    ANONYMOUS BLOCK EXECUTE
  • prior(idx)

    参数:int4类型。

    返回值:INT4类型。

    功能描述:返回数组中指定下标的前一个元素下标,若无法找到对应元素下标则返回NULL。

    示例:

    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr := varr('asd','zxc');
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'prior is %',v.PRIOR(2);
    gaussdb$# END;
    gaussdb$# /
    INFO:  prior is 1
    ANONYMOUS BLOCK EXECUTE
    -- 数组未初始化返回NULL
    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr;
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'prior is %',v.PRIOR(2);
    gaussdb$# END;
    gaussdb$# /
    INFO:  prior is <NULL>
    ANONYMOUS BLOCK EXECUTE
    -- 下标越界,大于数组范围
    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr := varr('asd','zxc','qwe');
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'prior is %',v.PRIOR(10);
    gaussdb$# END;
    gaussdb$# /
    INFO:  prior is 3
    ANONYMOUS BLOCK EXECUTE
  • next(idx)

    参数:int4类型。

    返回值:INT4类型。

    功能描述:返回数组中指定下标的后一个元素下标,若无法找到对应元素下标则返回NULL。

    示例:

    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr := varr('asd','zxc');
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'next is %',v.NEXT(1);
    gaussdb$# END;
    gaussdb$# /
    INFO:  next is 2
    ANONYMOUS BLOCK EXECUTE
    -- 数组未初始化返回NULL
    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr;
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'next  is %',v.NEXT(1);
    gaussdb$# END;
    gaussdb$# /
    INFO:  next  is <NULL>
    ANONYMOUS BLOCK EXECUTE
    -- 下标越界,大于数组范围
    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr := varr('asd','zxc','qwe');
    gaussdb-# BEGIN
    gaussdb$#     RAISE INFO 'next  is %',v.NEXT(10);
    gaussdb$# END;
    gaussdb$# /
    INFO:  next  is <NULL>
    ANONYMOUS BLOCK EXECUTE
  • exists(idx)

    参数:int4类型。

    返回值:TRUE或FALSE,BOOLEAN类型。

    功能描述:查找指定位置是否存在元素。

    示例:

    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr := varr('asd','zxc');
    gaussdb-#     flag BOOL;
    gaussdb-# BEGIN
    gaussdb$#     flag := v.EXISTS(1);
    gaussdb$#     RAISE INFO '%',flag;
    gaussdb$#     flag := v.EXISTS(3);
    gaussdb$#     RAISE INFO '%',flag;
    gaussdb$#     flag := v.EXISTS(7);
    gaussdb$#     RAISE INFO '%',flag;
    gaussdb$# END;
    gaussdb$# /
    INFO:  t
    INFO:  f
    INFO:  f
    ANONYMOUS BLOCK EXECUTE
    -- 数组未初始化返回false
    gaussdb=# DECLARE
    gaussdb-#     TYPE varr IS VARRAY(10) OF VARCHAR(3);
    gaussdb-#     v varr;
    gaussdb-#     flag BOOL;
    gaussdb-# BEGIN
    gaussdb$#     flag := v.EXISTS(1);
    gaussdb$#     RAISE INFO '%',flag;
    gaussdb$#     flag := v.EXISTS(3);
    gaussdb$#     RAISE INFO '%',flag;
    gaussdb$#     flag := v.EXISTS(7);
    gaussdb$#     RAISE INFO '%',flag;
    gaussdb$# END;
    gaussdb$# /
    INFO:  f
    INFO:  f
    INFO:  f
    ANONYMOUS BLOCK EXECUTE

相关文档