语法
UPDATE [ optimizer_hint ] table[subquery][@dblink ]
SET column = { expression | DEFAULT } [, ...]
[ WHERE condition ]
[ RETURNING return_expression [, ...]
{ INTO { record | variable [, ...] }
| BULK COLLECT INTO collection [, ...] } ]
UPDATE
更改满足条件的所有行中指定列的值。只需在 SET 子句中提及要修改的列;未显式修改的列保留其先前的值。
只能在 SPL 程序中指定
RETURNING INTO { record | variable [, ...] }
子句。此外,
UPDATE
命令的结果集不能返回多个行,否则将引发异常。如果结果集为空,则将目标记录或变量的内容设置为 null。
只有在 SPL 程序中使用
UPDATE
命令时,才能指定
RETURNING BULK COLLECT INTO collection [, ...]
子句。如果将多个
collection
指定为
BULK COLLECT INTO
子句的目标,则每个
collection
必须包含一个标量字段,即
collection
不得为记录。
UPDATE
命令的结果集可以包含零个、一个或多个行。针对结果集的每一行,
return_expression
的求值结果成为
collection
中的元素,从第一个元素开始。会删除
collection
中的所有现有行。如果结果集为空,则
collection
也将为空。
必须对表具有
UPDATE
特权才能更新表,还必须对在
expression
或
condition
中读取其值的任何表具有
SELECT
特权。
return_expression
可能包括表中一列或多列的表达式。如果在
return_expression
中指定表中的列名,则按如下方式确定在对
return_expression
求值时替换该列的值:
如果在
UPDATE
命令中为
return_expression
中指定的列分配一个值,则在计算
return_expression
时使用指定的值。
如果未在
UPDATE
命令中为
return_expression
中指定的列分配值,则受影响的行中列的当前值将用于计算
return_expression
。
collection
根据
return_expression
求值结果在其中创建元素的集合。可能存在单个集合(该集合可能是由单个字段组成的集合,也可能是由记录类型组成的集合),也可能存在多个集合(在这种情况下,每个集合必须由单个字段组成)。返回表达式的数量和顺序必须与所有指定集合中字段的数量和顺序匹配。每组对应的
return_expression
与
collection
字段的类型必须兼容。
subquery
子查询语句。
将 dept 表中第 20 部门的位置更改为 AUSTIN:
UPDATE dept SET loc = 'AUSTIN' WHERE deptno = 20;
对于 emp 表中
job = SALESMAN
的所有员工,将工资提升 10% 并将佣金增加 500。
UPDATE emp SET sal = sal * 1.1, comm = comm + 500 WHERE job = 'SALESMAN';
将
select * from table1
的结果作为一个目标对象,将目标对象的列class修改为1:
UPDATE (SELECT * FROM table1) SET class = 1 WHERE id = 1;