# 集合和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。  - 详情可参考[集合](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0425.html)章节。                         |
| 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参数。  - 详情可参考[数组](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0422.html)章节。   |
| Nested table语法： TABLE OF datatype \[ NOT NULL \]                                                                                                                                                     | 支持，有差异      | - GaussDB内NOT NULL只支持语法不支持功能。  - 详情可参考[集合](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0425.html)章节。                                                                                                                                                                                                                                                                                                          |
| 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](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0428.html)章节。                                                                                                                                                                                      |
   
表3构造器 
| Oracle数据库                                     | GaussDB数据库 |
|:---|:---|
| collection_type ( \[ value \[, value \]... \] ) | 支持        |
   
表4变量赋值 
| Oracle数据库                           | GaussDB数据库 | 差异                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|
| Associative array (or index-by table) | 支持       | -                                                                                                                                                                                                                                                                                                                                                   |
| VARRAY (variable-size array)         | 支持，有差异  | - GaussDB不同VARRAY类型的数据可以相互赋值，取决于其元素之间是否能相互隐式转换。  - 详情可参考[数组](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0422.html)章节。      |
| Nested table                        | 支持        | -                                                                                                                                                                                                                                                                                                                                                     |
| record                             | 支持，有差异   | - GaussDB不同record类型的数据可以相互赋值，取决于列与列之间是否能相互隐式转换。  - 详情可参考[record](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0428.html)章节。   |
   
表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类型。 |
   
表8record变量操作 
| Oracle数据库   | GaussDB数据库 |
|:---|:---|
| 构造器           | 支持          |
| %ROWTYPE声明变量 | 支持        |
| 定义常量constant   | 不支持        |
   
表9集合相关函数 
| Oracle数据库                       | GaussDB数据库 | 差异                                 |
|:---|:---|:---|
| unnest_table(anynesttable)     | 支持        | -                                    |
| unnest_table(anyindexbytable) | 支持          | -                                     |
| table(anyarray)                  | 不支持        | GaussDB使用unnest(anyarray)函数进行等价改写。 |
   
