ROW 数据类型,已命名

命名的 ROW 数据类型必须使用名称进行声明。此 SQL 标识在同一个数据库内的数据类型名称中必须唯一。

(未命名 ROW 类型是包含字段但没有任何用户定义的名称的 ROW 类型。)只有命名 ROW 类型支持数据类型继承。有关更多信息,请参阅 ROW 数据类型

定义命名 ROW 类型

必须通过使用 SQL 的 CREATE ROW TYPE 语句在数据库中声明并注册新的命名 ROW 类型。命名 ROW 类型的定义存储在 sysxtdtypes 系统目录表中。

ROW 数据类型的字段可以是任何内置数据类型或 UDT,但 ROW 类型的 TEXT 或 BYTE 字段只在类型表中有效。如果要在 CREATE TABLE 或 ALTER TABLE 语句中将 ROW 类型指定给列,那么其元素不能是 TEXT 或 BYTE 数据类型。

一般来说,ROW 类型字段的数据类型可以是以下任何类型:
  • 内置类型(TEXT 或 BYTE 数据类型除外)
  • 集合类型(LIST、MULTISET 或 SET)
  • 单值类型
  • 其他命名或未命名 ROW 类型
  • 不透明类型
以下 SQL 语句会维护命名 ROW 数据类型的定义:
  • CREATE ROW TYPE 语句将命名 ROW 类型添加至数据库。
  • DROP ROW TYPE 语句从数据库中除去先前定义的命名 ROW 类型。

可以将同一个表的不超过 195 列命名为 ROW 类型。

有关这些 SQL 语法语句的详细信息,请参阅 GBase 8s SQL 指南:语法。有关如何创建和使用命名 ROW 类型的示例,请参阅《GBase 8s 数据库设计和实现指南》。

等价和命名 ROW 类型

即使两个命名 ROW 类型具有完全相同的结构,因为其具有不同的名称,所以它们也不能相等。例如,以下命名 ROW 类型具有相同的结构(字段数相同并且行中字段的数据类型的顺序相同)但不相等:
name_t (lname CHAR(15), initial CHAR(1), fname CHAR(15))
emp_t (lname CHAR(15), initial CHAR(1), fname CHAR(15))
如果两个操作数是不同的命名 ROW 类型,那么布尔等式条件(例如 name_t = emp_t)的求值结果始终是 FALSE。

命名 ROW 类型和继承

命名 ROW 类型可以是类型继承层次结构的一部分。一种命名 ROW 类型可以是另一种命名 ROW 类型的父代(或超类型)。层次结构中的子类型继承其超类型的所有属性。GBase 8s SQL 指南:语法 和《GBase 8s 数据库设计和实现指南》中的 CREATE ROW TYPE 语句中说明了类型继承。

类型表

作为继承层次结构一部分的表必须是类型表。类型表是已指定命名 ROW 类型的表。有关用来创建类型表的语法,请参阅 GBase 8s SQL 指南:语法 中的 CREATE TABLE 语句。在该节中还说明了表继承及其与类型继承的关系。有关如何创建和使用类型表的信息,请参阅《GBase 8s 数据库设计和实现指南》。