未命名行类型

未命名行类型是使用 ROW 构造函数创建的一组类型字段。命名行类型与未命名行类型之间的一项重要区别是不能对表指定未命名行类型。只能使用未命名行类型定义列或字段的类型。另外,未命名行类型只是由它的结构标识,而命名行类型由它的名称标识。行类型的结构由它的字段的数目和数据类型组成。

以下语句对 student 表的列指定两个未命名行类型:
CREATE TABLE student
(
      s_name  ROW(f_name VARCHAR(20), m_init CHAR(1), 
                              l_name VARCHAR(20) NOT NULL),
      s_address  ROW(street VARCHAR(20), city VARCHAR(20), 
                                    state CHAR(2), zip VARCHAR(9))
   );
student 表的 s_names_address 列都包含多个字段。未命名行类型的每个字段都可以具有不同的数据类型。虽然 student 表只有两列,但未命名行类型总共定义了 7 个字段:
以下示例显示如何使用 INSERT 语句来将数据插入 student 表中:
INSERT INTO student
VALUES (ROW('Jim', 'K', 'Johnson'), ROW('10 Grove St.',
'Eldorado', 'CA', 94108))

有关如何修改对行类型定义的列的更多信息,请参阅 GBase 8s SQL 指南:教程

数据库服务器不对两个包含相同数目的字段并且带有相同类型的对应字段的未命名行类型加以区别。在未命名行类型的类型检查中,字段名是不相关的。例如:数据库服务器不对下列未命名行类型加以区别:
ROW(a INTEGER, b CHAR(4));
ROW(x INTEGER, y CHAR(4));

有关未命名行类型的语法,请参阅 GBase 8s SQL 指南:语法。有关如何对行类型值进行强制转型的信息,请参阅创建和使用用户定义的强制转型

以下数据类型不能是未命名行类型中的字段类型:

当在未命名行类型的字段定义中指定了任何前述类型时,数据库服务器将返回错误。