使用命名行类型创建列

类型表和无类型表都可以包含对命名行类型定义的列。对命名行类型定义的列无论是出现在类型表中还是出现在无类型表中都具有相同的行为。在以下示例中,第一个语句创建命名行类型 address_t;第二个语句对 employee 表中的 address 列指定 address_t 类型:
CREATE ROW TYPE address_t
(
      street  VARCHAR(20),
      city    VARCHAR(20),
      state   CHAR(2),
      zip     VARCHAR(9)
);

CREATE TABLE employee
(
      name     VARCHAR(30),
      address  address_t,
      salary   INTEGER
);

在上述 CREATE TABLE 语句中,address 列具有 address_t 类型的 streetcitystatezip 字段。因此,employee 表(它只有 3 列)包含 namestreetcitystatezipsalary 的值。使用点符号表示法来访问对行类型定义的列的个别字段。有关使用点符号表示法来访问列字段的信息,请参阅 GBase 8s SQL 指南:教程

在将数据插入对其指定了行类型的列中时,必须使用 ROW 构造函数来指定该行类型的行字面值。以下示例显示如何使用 INSERT 语句来将行插入到 employee 表中:
INSERT INTO employee
VALUES ('John Bryant', 
    ROW('10 Bay Street', 'Madera', 'CA', 95400)::address_t, 55000);

对于对命名行类型执行的插入或更新操作,不强制执行强类型化。要确保行值具有命名行类型,必须显式地将强制转型为命名行类型以生成具有命名行类型的值,如上一示例所示。INSERT 语句插入三个值,其中一个是包含四个值的行类型值。更明确地说,此操作对 namesalary 列插入一元值,但它创建 address_t 类型的实例并将其插入到 address 列中。

有关如何插入、更新和删除对行类型定义的列的更多信息,请参阅 GBase 8s SQL 指南:教程