更新时间:2026-10-21 GMT+08:00
分享

集合和Record

表1 类型

Oracle数据库

GaussDB数据库

Associative array (or index-by table)

支持

VARRAY (variable-size array)

支持

Nested table

支持

record

支持

表2 语法

Oracle数据库

GaussDB数据库

差异

Associative array (or index-by table)语法:

TABLE OF datatype [ NOT NULL ]

INDEX BY { PLS_INTEGER | BINARY_INTEGER | VARCHAR2 ( v_size ) | data_type }

支持,有差异

  • GaussDB不支持 PLS_INTEGER类型,GaussDB内data_type可以为基础数据类型、或存储过程内定义的record类型、集合类型、数组类型,不支持ref cursor类型。
  • GaussDB内NOT NULL只支持语法不支持功能,即不会校验元素是否为NULL。
  • 详情可参考集合章节。

VARRAY (variable-size array)语法:

{ VARRAY | [ VARYING ] ARRAY } ( size_limit )

OF datatype [ NOT NULL ]

支持,有差异

  • GaussDB内不支持NOT NULL语法。
  • GaussDB内不支持datatype为varray类型(varray不能嵌套)。
  • size_limit功能生效需要在behavior_compat_optionsGUC参数中开启varray_compat参数。
  • 详情可参考数组章节。

Nested table语法:

TABLE OF datatype [ NOT NULL ]

支持,有差异

  • GaussDB内NOT NULL只支持语法不支持功能。
  • 详情可参考集合章节。

record语法:

TYPE record_type IS RECORD ( field_definition [, field_definition]... ) ;

支持

  • record的列可以定义为NOT NULL属性也可以指定默认值。其他类型嵌套record类型,record类型的默认值和NOT NULL不生效;通过package.record_type访问类型的形式来创建record变量,该record变量的默认值和NOT NULL不生效。
  • 详情可参考record章节。
表3 构造器

Oracle数据库

GaussDB数据库

collection_type ( [ value [, value ]... ] )

支持

表4 变量赋值

Oracle数据库

GaussDB数据库

差异

Associative array (or index-by table)

支持

-

VARRAY (variable-size array)

支持,有差异

  • GaussDB不同VARRAY类型的数据可以相互赋值,取决于其元素之间是否能相互隐式转换。
  • 详情可参考数组章节。

Nested table

支持

-

record

支持,有差异

  • GaussDB不同record类型的数据可以相互赋值,取决于列与列之间是否能相互隐式转换。
  • 详情可参考record章节。
表5 集合操作符

Oracle数据库

GaussDB数据库

差异

=

支持,有差异

  • Oracle:比较时忽略集合成员先后顺序。
  • GaussDB:比较时严格按照集合成员先后顺序。

<>

支持,有差异

  • Oracle:比较时忽略集合成员先后顺序。
  • GaussDB:比较时严格按照集合成员先后顺序。

IS [NOT] NULL

支持

-

^=

支持,有差异

  • Oracle:比较时忽略集合成员先后顺序。
  • GaussDB:比较时严格按照集合成员先后顺序。

~=

不支持

-

IS [NOT] A SET

不支持

-

IS [NOT] EMPTY

不支持

-

expr [NOT] MEMBER [OF] nested_table

不支持

-

nested_table1

[NOT] SUBMULTISET [OF]

nested_table2

不支持

-

[NOT] IN

支持

  • Oracle:比较时忽略集合成员先后顺序。
  • GaussDB:比较时严格按照集合成员先后顺序。
表6 集合MULTISET函数

Oracle数据库

GaussDB数据库

MULTISET UNION [ALL | DISTINCT]

支持

MULTISET EXCEPT [ALL | DISTINCT]

支持

MULTISET INTERSECT [ALL | DISTINCT]

支持

表7 集合类型函数

Oracle数据库

GaussDB数据库

差异

exists(idx)

支持

-

extend[(count[, idx])]

支持,有差异

GaussDB仅支持nesttable类型。

delete[(idx1[, idx2])]

支持

-

trim[(n)]

支持,有差异

GaussDB仅支持nesttable类型。

count

支持

-

first

支持

-

last

支持

-

prior(idx)

支持

-

next(idx)

支持

-

limit

支持,有差异

GaussDB仅支持nesttable类型。

表8 record变量操作

Oracle数据库

GaussDB数据库

构造器

支持

%ROWTYPE声明变量

支持

定义常量constant

不支持

表9 集合相关函数

Oracle数据库

GaussDB数据库

差异

unnest_table(anynesttable)

支持

-

unnest_table(anyindexbytable)

支持

-

table(anyarray)

不支持

GaussDB使用unnest(anyarray)函数进行等价改写。

相关文档