依赖于该列是命名了的 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';
GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 174 -
要更新在未命名的 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 值。