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 类型的 street、city、state 和 zip 字段。因此,employee 表(它只有 3 列)包含 name、street、city、state、zip 和 salary 的值。使用点符号表示法来访问对行类型定义的列的个别字段。有关使用点符号表示法来访问列字段的信息,请参阅 GBase 8s SQL 指南:教程。
INSERT INTO employee
VALUES ('John Bryant',
ROW('10 Bay Street', 'Madera', 'CA', 95400)::address_t, 55000);
对于对命名行类型执行的插入或更新操作,不强制执行强类型化。要确保行值具有命名行类型,必须显式地将强制转型为命名行类型以生成具有命名行类型的值,如上一示例所示。INSERT 语句插入三个值,其中一个是包含四个值的行类型值。更明确地说,此操作对 name 和 salary 列插入一元值,但它创建 address_t 类型的实例并将其插入到 address 列中。
有关如何插入、更新和删除对行类型定义的列的更多信息,请参阅 GBase 8s SQL 指南:教程。