
# 数组支持的函数
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 以下示例为ORA兼容模式下的示例，函数定义说明里\[\]中的内容代表可选项，如count\[()\]表示可以写成count或count()。
- 暂不支持数组未初始化报错（Reference to uninitialized collection）、数组下标越界报错（Subscript beyond count）、数组下标超限制报错（Subscript outside of limit）。
- 在内层表达式中，不支持通过嵌套的方式调用数组类型函数。
 
- 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
  -- 数组未初始化
  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(4);
  gaussdb$#     raise info '%', arrint;
  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
  ```
  
 
