GBase 8s数据库更新 row 类型 :

依赖于该列是命名了的 ROW 类型还是未命名的 ROW 类型,您用于更新 row 类型值的语法会不同。本部分描述那些差异,还描述如何为 ROW 类型的字段指定 NULL 值。


  • 更新包含命名了的 row 类型的行

要更新在命名了的 ROW 类型上定义的列,您必须指定所有 ROW 类型的字段。例如,下列语句仅更新employee 表中 address 列的 street 和 city字段,但每一 ROW 类型的字段必须 包含一个值(允许 NULL 值):

UPDATE employee SET address = ROW('103 California St', San Francisco', address.state, address.zip)::address_t WHERE name = 'zawinul, joe';

在此示例中,从该行中读取 state 和 zip 字段的值,然后立即重新插入到该行内。仅更 新 address 列的 street 和 city 字段。 当您更新在命名了的 ROW 类型上定义的列的字段时,您必须使用 ROW 构造函数,并将 该行值强制转型为适当的命名了的 ROW 类型。


  • 更新包含未命名的 row 类型的行

要更新在未命名的 ROW 类型上定义的列,您必须指定该 ROW 类型的所有字段。例如, 下列语句仅更新 student 表中 address 列的 street 和 city字段,但 ROW 类型的每一字段都必 须包含一个值(允许 NULL 值):

UPDATE student SET s_address = ROW('13 Sunset', 'Fresno', s_address.state, s_address.zip) WHERE s_name = 'henry, john';

要更新在未命名的 ROW 类型上定义的列的字段,请始终在插入该字段值之前,指定 ROW 构造函数。


  • 为 row 类型的字段指定 Null 值

row 类型列的字段可包含 NULL 值。当您以 NULL 值插入到 row 类型字段内或更新 row 类型字段时,您必须将该值强制转型为那个字段的数据类型。 下列 UPDATE 语句展示您可以如何为命名了的 row 类型列的特定字段指定 NULL 值:

UPDATE employee SET address = ROW(NULL::VARCHAR(20), 'Davis', 'CA', ROW(NULL::CHAR(5), NULL::CHAR(4)))::address_t) WHERE name = 'henry, john';

下列 UPDATE 语句展示您如何为 student 表的 address 列的 street 和 zip 字段指定 NULL 值。

UPDATE student SET address = ROW(NULL::VARCHAR(20), address.city, address.state, NULL::VARCHAR(9)) WHERE s_name = 'henry, john';

重要: 您不可为 row 类型列指定 NULL 值。您仅可为 row 类型的个别的字段指定 NULL值。