集合

集合类型的使用

在使用集合之前,需要自定义一个集合类型。

在存储过程中紧跟AS关键字后面定义集合类型。定义方法如下。

集合 - 图1

其中:

  • table_type:要定义的集合类型名。
  • TABLE:表示要定义集合类型。
  • data_type:要创建的集合中成员的类型。
  • indexby_type: 创建集合索引的类型。

集合 - 图2 说明:

  • 在openGauss中,集合会自动增长,访问越界会返回一个NULL,不会报错。
  • 在存储过程中定义的集合类型,其作用域仅在该存储过程中。
  • 索引的类型仅支持integer和varchar类型,其中varchar的长度暂不约束。
  • NOT NULL只支持语法不支持功能。
  • data_type可以为存储过程内定义的record类型,集合类型(匿名块不支持),不可以为数组类型。
  • 不支持跨package的嵌套集合类型变量使用。
  • 不支持record嵌套table of index by类型的变量作为存储过程的出入参。
  • 不支持table of index by类型的变量作为函数的出入参。
  • 不支持通过raise info打印整个嵌套table of变量。
  • 不支持跨自治事务传递table of变量。
  • 不支持存储过程的出入参定义为嵌套table of类型。

openGauss支持使用圆括号来访问集合元素,且还支持一些特有的函数,如extend,count,first,last, prior, next, delete来访问集合的内容。

集合函数支持multiset union/intersect/except all/distinct函数。

集合 - 图3 说明:

同一个表达式里不支持两个以上table of index by类型变量的函数调用。