LIST(e) 数据类型

LIST 数据类型是可存储相同 SQL 数据类型的有序非 NULL 元素的集合类型。

LIST 数据类型支持(但不需要)重复元素值。LIST 数据类型的元素具有顺序位置。LIST 对象必须具有第一元素,可后跟第二元素,以此类推。

有关不支持顺序位置的无序集合数据类型,请参阅 MULTISET(e) 数据类型SET(e) 数据类型。有关可以存储一组包含不同 SQL 数据类型值的复杂数据类型,请参阅 ROW 数据类型

可以将相同表的不超过 97 列声明为 LIST 数据类型。(同一限制适用于 SET 和 MULTISET 集合类型。)

缺省情况下,数据库服务器将新元素插入元素集末尾的插入 LIST 对象中。为了支持 LIST 的顺序位置,INSERT 语句提供了 AT 子句。此子句允许您指定要插入 LIST 元素值的位置。有关更多信息,请参阅 GBase 8s SQL 指南:语法 中的 INSERT 语句。

LIST 对象中的所有元素都具有相同的元素类型。要指定元素类型,使用以下语法:
LIST(element_type NOT NULL)
LIST 的 element_type 可以是下列数据类型之一:
  • 内置类型(SERIAL、SERIAL8、BIGSERIAL、BYTE 和 TEXT 除外)
  • DISTINCT 类型
  • 未命名或命名 ROW 类型
  • 其他集合类型
  • 不透明类型

必须对 LIST 元素指定 NOT NULL 约束。其他约束对 LIST 列无效。有关 LIST 数据类型语法的更多信息,请参阅 GBase 8s SQL 指南:语法

可以在任何其他数据类型有效的地方使用 LIST。例如:
  • 在用来搜索匹配的 LIST 值的 SELECT 语句 WHERE 子句中的 IN 谓词后面
  • 用作确定 LIST 列中的元素数目的 CARDINALITY 或 mi_collection_card( ) 函数的自变量

不能将 LIST 值用作聚集函数(例如,AVG、MAX、MIN 或 SUM)的自变量。

与使用其他集合数据类型一样,必须在数据类型声明中使用括号 ( ( ) ) 来为 LIST 数据类型的元素集定界:
CREATE FUNCTION  update_nums( list1 LIST (ROW (a VARCHAR(10),
                                               b VARCHAR(10),
                                               c INT) NOT NULL ));
但是,在包含文字 LIST 值的 SQL 表达式中,必须使用花括号 ({ }) 来对 LIST 对象的元素集定界,如以下示例中所示。
如果两个 LIST 值具有相同顺序的相同元素,那么它们相等。以下是 LIST 对象的两个示例,但是它们的值不相等。:
LIST{"blue", "green", "yellow"}
LIST{"yellow", "blue", "green"}
上面的表达式不相等,原因是值顺序不同。要使其相同,第二条语句必须为:
LIST{"blue", "green", "yellow"}