您可为目标表声明别名。该别名可引用本地或远程表、视图或同义词的完全符合条件的数据库对象。
别名是不注册在数据库的系统目录中的临时名称,仅在 UPDATE 语句正在运行时保持。
如果您声明作为别名的名称还是 UPDATE 语句的关键字,则您必须使用 AS 关键字来阐明语法:
UPDATE stock AS set
SET unit_price = unit_price * 0.94;
下列 UPDATE 语句引用在目标子句中和在两个子查询中表的符合要求的名称:
UPDATE nmosdb@wnmserver1:test
SET name=(SELECT name FROM test
WHERE test.id = nmosdb@wnmserver1:test.id)
WHERE EXISTS(
SELECT 1 FROM test WHERE test.id = nmosdb@wnmserver1:test.id
);
下一 UPDATE 语句在逻辑上等同于前一示例,但为符合条件的表名称声明 r_t 别名:
UPDATE nmosdb@wnmserver1:test r_t
SET name=(SELECT name FROM test
WHERE test.id = r_t.id)
WHERE EXISTS(
SELECT 1 FROM test WHERE test.id = r_t.id
);
声明表别名会简化上述第二个示例的标记。
使用 SET 子句来标识要更新的列并将值指定给每一列。
SET 子句支持下列语法格式:
SET 子句
单列格式
使用单列格式来将一列与单个表达式配对。
单列格式
元素 | 描述 | 限制 | 语法 |
column | 要被更新的列 | 不可为序列数据类型 | 标识符 |
collection_var | 主变量或程序变量 | 必须声明作为集合数据类型 | 特定于语言 |
expression | 为 column 返回一值 | 不可包含聚集函数 | 表达式 |
singleton _select | 正好返回一行的子查询 | 返回的子查询值必须与 column 列表一一对应 | SELECT 语句 |
您可使用此语法来更新有 ROW 数据类型的列。
您可包括任意数量的 "single column = single expression" 词语。expression 可为返回单个行的 SQL 子查询(括在圆括号之间),假如对应的 column 为可从子查询返回的行存储该值(或值的集合)的数据类型。
要在 SET 子句中指定 ROW 类型列的值,请参阅 更新 ROW 类型列。下列示例说明 SET 子句的单列格式。
UPDATE customer
SET address1 = '1111 Alder Court', city = 'Palo Alto',
zipcode = '94301' WHERE customer_num = 103;
UPDATE stock
SET unit_price = unit_price * 1.07;
使用子查询来更新单列
您可以子查询返回的值更新在 SET 子句中指定的列。
UPDATE orders
SET ship_charge =
(SELECT SUM(total_price) * .07 FROM items
WHERE orders.order_num = items.order_num)
WHERE orders.order_num = 1001;
如果您正在更新表层级中的超级表,则 SET 子句不可包括引用子表的子查询。如果您正在更新表层级中的子表,则 SET 子句中的子查询可引用超级表,如果它仅引用超级表的话。也就是说,子查询必须使用 SELECT … FROM ONLY (supertable) 语法。