GBase 8c
适配迁移
文章

GBase8c复合类型之数组类型

发表于2025-12-24 10:57:209次浏览2个评论

GBase 8c 支持数组类型,允许存储和操作一维或多维数组数据。数组类型需在存储过程或函数中通过自定义类型定义,使用 TYPE array_type IS VARRAY(size) OF data_type; 语法,其中 array_type 为类型名,size 为最大元素数量(正整数),data_type 为成员类型(如 integertext)‌1

数组操作与函数:‌ 数组支持自动增长,访问越界元素时返回 NULL。GBase 8c 提供了丰富的内置函数用于数组处理,例如:

  • array_append(anyarray, anyelement):向数组末尾添加元素(仅限一维数组)。

  • array_prepend(anyelement, anyarray):向数组开头添加元素(仅限一维数组)。

  • array_cat(anyarray, anyarray):连接两个数组(支持多维数组)。

  • array_union(anyarray, anyarray):合并数组并保留重复元素。

  • array_union_distinct(anyarray, anyarray):合并数组并去重。

  • array_intersect(anyarray, anyarray):计算两个数组的交集。

  • array_except(anyarray, anyarray):计算两个数组的差集。

  • array_ndims(anyarray):返回数组的维度数。

  • array_length(anyarray, int):返回指定维度的长度。

  • unnest(anyarray):将数组展开为行集。
    此外,还可使用 string_to_array 将字符串转换为数组,或 array_to_string 反向转换;访问数组元素时使用圆括号(如 array‌:ml-citation{ref="2" data="citationList"})‌13

数组的使用场景与限制:‌ 数组类型的作用域限于定义它的存储过程或函数内部,无法在全局环境中直接使用。数组元素可通过圆括号索引访问,但越界访问不会报错,仅返回 NULL。数组类型不支持在匿名块中使用记录类型(record type),且自定义数组类型与存储过程中定义的同名类型冲突时,系统优先选择存储过程内的定义‌
 

评论

登录后才可以发表评论
用户头像
柒柒天晴发表于 3个月前
11
GBase用户47954发表于 1个月前
感谢作者的精彩分享!