SET(e) 数据类型

SET 数据类型是存储唯一元素的无序集合类型

GBase 8s SQL 指南:语法 中所述,重复的元素值无效。(有关支持重复值的集合类型,请参阅 MULTISET(e) 数据类型中对 MULTISET 的描述。)

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

SET 中的元素没有按顺序的位置。也就是说,在 SET 中不存在第一、第二或第三元素的构造。(有关具有元素的顺序位置的集合类型,请参阅 LIST(e) 数据类型。)SET 中的所有元素都具有相同的元素类型。要指定元素类型,使用以下语法:
SET(element_type NOT NULL)
集合的 element_type 可以是下列任何类型:
  • 内置类型(SERIAL、SERIAL8、BIGSERIAL、BYTE 和 TEXT 除外)
  • 命名或未命名 ROW 类型
  • 其他集合类型
  • 不透明类型

必须对 SET 元素指定 NOT NULL 约束。对于 SET 列,没有任何其他约束有效。有关 SET 集合类型语法的更多信息,请参阅 GBase 8s SQL 指南:语法

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

不能将 SET 值用作聚集函数(例如,AVG、MAX、MIN 或 SUM)的自变量。有关更多信息,请参阅 GBase 8s SQL 指南:语法 中的 Condition 和 Expression 两节。

下面的示例声明两个集合。第一条语句声明一组整数,第二条语句声明一组字符元素。
SET(INTEGER NOT NULL)
SET(CHAR(20) NOT NULL)
下面的示例从值列表中构造相同的集合:
SET{1, 5, 13}
SET{"Oakland", "Menlo Park", "Portland", "Lenexa"}
在以下示例中,SET 构造函数是 CREATE TABLE 语句的一部分:
CREATE TABLE tab
(
      c CHAR(5),
      s SET(INTEGER NOT NULL)
);
下列 set 值相等:
SET{"blue", "green", "yellow"}
SET{"yellow", "blue", "green"}