数组支持的函数
- 以下示例为ORA兼容模式下的示例,函数定义说明里[]中的内容代表可选项,如count[()]表示可以写成count或count()。
- 暂不支持数组未初始化报错(Reference to uninitialized collection)、数组下标越界报错(Subscript beyond count)、数组下标超限制报错(Subscript outside of limit)。
- 在内层表达式中,不支持通过嵌套的方式调用数组类型函数。
- extend[(count)]
返回值:无返回值。
功能描述:在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)
返回值:无返回值。
功能描述:在varray变量末尾拓展count个元素,并且扩展元素的值等于给定idx下标元素的值。该功能需要设置a_format_version值为10c和设置a_format_dev_version值为s1后才能使用。
示例: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类型。
功能描述:返回数组中的元素个数。
示例1:查看已初始化的数组元素个数。
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时,删除数组末尾指定数量元素空间。
示例1:删除数组中的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[()]
返回值:无返回值。
功能描述:清空数组中的元素。
示例1:清空数组中的元素。
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)
返回值:无返回值。
功能描述:给定下标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。
示例1:
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类型。
功能描述:返回数组中指定下标的前一个元素下标,若无法找到对应元素下标则返回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类型。
功能描述:返回数组中指定下标的后一个元素下标,若无法找到对应元素下标则返回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)
返回值: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