
# 数组支持的函数
![](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 以下几点说明描述了数组类型函数在开启GUC参数varray_compat前后的差异行为：
  - count、extend、trim、delete、first、last、next和prior函数应用在未初始化的数组即数组为NULL时，开启参数会报Reference to uninitialized collection的错误，未开启则不报错。
  
  - 对于extend(count)函数和extend(count, idx)函数：count加上数组现有元素个数超过数组定义大小时，开启参数后会报Subscript outside of limit的错误，未开启则不报错。
  
  - 对于extend(count, idx)函数：下标idx不合法时开启参数后会报Subscript outside of limit或者Subscript beyond count的错误。
  
  - 对于trim(n)函数：当n大于数组元素个数时，开启参数后会报Subscript beyond count的错误，未开启则不报错。
  
  - 对于delete(idx)函数：下标idx不合法时开启参数后会报Subscript outside of limit或者Subscript beyond count的错误，未开启参数时返回原数组。
   
- 以下示例为A兼容模式下的示例，函数定义说明里\[\]中的内容代表可选项，如count\[()\]表示可以写成count或count()。
- 如在执行以下示例时遇到报错Cannot change the guc status while in the same session时，需要切换session后重新执行。
- 在内层表达式中，不支持通过嵌套的方式调用数组类型函数。
 
- extend\[(\[count\])\] 参数：count为int4类型。
  返回值：无返回值。
  功能描述：在varray变量末尾拓展1个或count个元素，元素默认扩展为NULL。
  示例1：extend，扩展1个元素，默认扩展为NULL。
  ```
  gaussdb=# set behavior_compat_options = '';
  SET
  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=# set behavior_compat_options = '';
  SET
  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
  ```
  示例3：开启varray_compat参数时，extend后超过数组定义大小会报错。
  ```
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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$#     arrint.extend(8); -- error
  gaussdb$# end;
  gaussdb$# /
  0
  3
  ERROR:  Subscript outside of limit
  CONTEXT:  PL/SQL function inline_code_block line 7 at assignment
  ```
  示例4：开启varray_compat参数时，数组未初始化会报错。
  ```
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  gaussdb=# declare
  gaussdb-#     type array_integer is varray(10) of integer;
  gaussdb-#     arrint array_integer;
  gaussdb-# begin
  gaussdb$#     arrint.extend(3);
  gaussdb$# end;
  gaussdb$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/pgSQL function inline_code_block line 4 at assignment
  ```
  
  
- extend(count, idx) 参数：idx和count为int4类型。
  返回值：无返回值。
  功能描述：在varray变量末尾拓展count个元素，并且扩展元素的值等于给定idx下标元素的值。该功能需要设置a_format_version值为10c和设置a_format_dev_version值为s1后才能使用。
  示例1：extend(count, idx)，扩展第idx位置的元素。
  ```
  gaussdb=# set a_format_version='10c';
  SET
  gaussdb=# set a_format_dev_version='s1';
  SET
  gaussdb=# set behavior_compat_options = '';
  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
  ```
  示例2：extend(count, idx)，开启了varray_compat参数，且idx越界会报错。
  ```
  gaussdb=# set a_format_version='10c';
  SET
  gaussdb=# set a_format_dev_version='s1';
  SET
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  gaussdb=# declare
  gaussdb-#     type array_integer is varray(10) of integer;
  gaussdb-#     arrint array_integer := array_integer();
  gaussdb-# begin
  gaussdb$#     arrint.extend(10, 1); -- error index.
  gaussdb$# end;
  gaussdb$# /
  ERROR:  Subscript beyond count
  CONTEXT:  PL/SQL function inline_code_block line 4 at assignment
  ```
  示例3：extend(count, idx)，开启了varray_compat参数，数组未初始化时会报错。
  ```
  gaussdb=# set a_format_version='10c';
  SET
  gaussdb=# set a_format_dev_version='s1';
  SET
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  gaussdb=# declare
  gaussdb-#     type array_integer is varray(10) of integer;
  gaussdb-#     arrint array_integer;
  gaussdb-# begin
  gaussdb$#     arrint.extend(10, 1);
  gaussdb$# end;
  gaussdb$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/pgSQL function inline_code_block line 4 at assignment
  ```
  

- count\[()\] 参数：无。
  返回值：int4类型。
  功能描述：返回数组中的元素个数。
  示例1：查看已初始化的数组元素个数。
  ```
  gaussdb=# set behavior_compat_options = '';
  SET
  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
  ```
  示例2：开启varray_compat参数，且数组未初始化时会报错。
  ```
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  gaussdb=# declare
  gaussdb-#     type array_integer is varray(10) of integer;
  gaussdb-#     arrint array_integer;
  gaussdb-#     len int;
  gaussdb-# begin
  gaussdb$#     len := arrint.count();
  gaussdb$#     dbe_output.print_line(len);
  gaussdb$# end;
  gaussdb$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/SQL function inline_code_block line 5 at assignment
  ```
  
  

- trim\[(n)\] 参数：n为int4类型。
  返回值：无返回值。
  功能描述：无参数时，删除数组末尾一个元素空间，给定参数n时，删除数组末尾指定数量元素空间。
  示例1：删除数组中的n个元素，未开启参数varray_compat。
  ```
  gaussdb=# set behavior_compat_options = '';
  SET
  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
  ```
  示例2：删除数组中的n个元素，且n大于数组元素个数，未开启参数varray_compat。
  ```
  -- n大于数组元素个数，清空数组元素
  gaussdb=# set behavior_compat_options = '';
  SET
  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
  ```
  示例3：删除数组中的n个元素，且n大于数组元素个数，同时打开varray_compat参数。
  ```
  -- n大于数组元素个数时会报错
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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); -- count > 0.
  gaussdb$#     arrint.trim(4);
  gaussdb$# end;
  gaussdb$# /
  3
  ERROR:  Subscript beyond count
  CONTEXT:  PL/SQL function inline_code_block line 5 at assignment
  -- 数组未初始化报错
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  gaussdb=# declare
  gaussdb-#     type array_integer is varray(10) of integer;
  gaussdb-#     arrint array_integer;
  gaussdb-# begin
  gaussdb$#     arrint.trim(1);
  gaussdb$# end;
  gaussdb$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/SQL function inline_code_block line 4 at assignment
  ```
  示例4：数组未初始化，同时打开varray_compat参数。
  ```
  -- 数组未初始化报错
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  gaussdb=# declare
  gaussdb-#     type array_integer is varray(10) of integer;
  gaussdb-#     arrint array_integer;
  gaussdb-# begin
  gaussdb$#     arrint.trim(1);
  gaussdb$# end;
  gaussdb$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/SQL function inline_code_block line 4 at assignment
  ```
  

- delete\[()\] 参数：无参数。
  返回值：无返回值。
  功能描述：清空数组中的元素。
  示例1：清空数组中的元素，未开启参数varray_compat。
  ```
  gaussdb=# set behavior_compat_options = '';
  SET
  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
  ```
  示例2：清空数组中的元素，同时开启参数varray_compat。
  ```
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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=# set behavior_compat_options = 'varray_compat';
  SET
  gaussdb=# declare
  gaussdb-#     type array_integer is varray(10) of integer;
  gaussdb-#     arrint array_integer;
  gaussdb-# begin
  gaussdb$#     arrint.delete();
  gaussdb$# end;
  gaussdb$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/SQL function inline_code_block line 4 at assignment
  ```
  
- delete(idx) 参数：int4类型。
  返回值：无返回值。
  功能描述：给定下标idx在数组范围内，则删除数组中给定下标idx的元素。
  示例1：给定idx下标在数组范围内。
  ```
  gaussdb=# set a_format_version='';
  SET
  gaussdb=# set a_format_dev_version='';
  SET
  gaussdb=# set behavior_compat_options = '';
  SET
  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下标在数组范围外，未开启参数varray_compat。
  ```
  -- 未开参数varray_compat
  gaussdb=# set behavior_compat_options = '';
  SET
  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
  -- 开启参数varray_compat后报错
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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
  ERROR:  Subscript beyond count
  CONTEXT:  PL/SQL function inline_code_block line 5 at assignment
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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
  ERROR:  Subscript outside of limit
  CONTEXT:  PL/SQL function inline_code_block line 5 at assignment
  ```
  示例3：给定idx下标在数组范围外，开启参数varray_compat。
  ```
  -- 开启参数varray_compat后报错
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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
  ERROR:  Subscript beyond count
  CONTEXT:  PL/SQL function inline_code_block line 5 at assignment
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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
  ERROR:  Subscript outside of limit
  CONTEXT:  PL/SQL function inline_code_block line 5 at assignment
  ```
  示例4：开启varray_compat参数后，数组未初始化时报错。
  ```
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  gaussdb=# declare
  gaussdb-#     type array_integer is varray(10) of integer;
  gaussdb-#     arrint array_integer;
  gaussdb-# begin
  gaussdb$#     arrint.delete(2);
  gaussdb$# end;
  gaussdb$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/pgSQL function inline_code_block line 4 at assignment
  ```
  
- first\[()\] 参数：无。
  返回值：int4类型。
  功能描述：返回数组中第一个元素的下标，若没有第一个元素，则返回NULL。
  示例：
  ```
  gaussdb=# set behavior_compat_options = '';
  SET
  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
  -- 开启varray_copmat参数后，数组未初始化报错
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/pgSQL function inline_code_block line 4 at RAISE
  ```
  
- last\[()\] 参数：无。
  返回值：int4类型。
  功能描述：返回数组中最后一个元素的下标。若没有最后一个元素，则返回NULL。
  示例1：
  ```
  gaussdb=# set behavior_compat_options = '';
  SET
  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
  -- 开启varray_copmat参数后，数组未初始化报错
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  gaussdb=# declare
  gaussdb-#     type varr is varray(10) of varchar(3);
  gaussdb-#     v varr;
  gaussdb-# begin
  gaussdb$#     raise info 'first is %',v.last;
  gaussdb$# end;
  gaussdb$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/pgSQL function inline_code_block line 4 at RAISE
  ```
  
  
- prior(idx) 参数：int4类型。
  返回值：int4类型。
  功能描述：返回数组中指定下标的前一个元素下标，若无法找到对应元素下标则返回NULL。
  示例：
  ```
  gaussdb=# set behavior_compat_options = '';
  SET
  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
  -- 下标越界，大于数组范围
  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
  -- 开启varray_copmat参数后，数组未初始化报错
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/pgSQL function inline_code_block line 4 at RAISE
  ```
  
  
- next(idx) 参数：int4类型。
  返回值：int4类型。
  功能描述：返回数组中指定下标的后一个元素下标，若无法找到对应元素下标则返回NULL。
  示例：
  ```
  gaussdb=# set behavior_compat_options = '';
  SET
  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
  -- 下标越界，大于数组范围
  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
  -- 开启varray_copmat参数后，数组未初始化报错
  gaussdb=# set behavior_compat_options = 'varray_compat';
  SET
  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$# /
  ERROR:  Reference to uninitialized collection
  CONTEXT:  PL/pgSQL function inline_code_block line 4 at RAISE
  ```
  
  
- 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
  ```
  
  
 
