更新表的行。
語法
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
特權。
參數
參數 | 說明 |
---|---|
optimizer_hint | 向優化程序提供的注釋嵌入式提示,用于選擇執行計劃。 |
table | 要更新的表的名稱(可能是 schema 限定的)。 |
dblink | 用于標識遠程數據庫的 database link 名稱。有關 database link 的信息,請參見 CREATE DATABASE LINK 命令。
|
column | 表中的列名。 |
expression | 要分配給列的表達式。表達式可以使用表中此列和其他列的舊值。 |
DEFAULT | 將列設置為其默認值(如果沒有為其分配特定的默認表達式,則為 null)。 |
condition | 返回 BOOLEAN 類型的值的表達式。將僅更新此表達式返回 true 的行。
|
return_expression | 可能包括表中一列或多列的表達式。如果在 return_expression 中指定表中的列名,則按如下方式確定在對 return_expression 求值時替換該列的值:
|
record | 要為其字段分配 return_expression 求值結果的記錄。第一個 return_expression 分配給 record 中的第一個字段,第二個 return_expression 分配給 record 中的第二個字段,以此類推。record 中的字段數量必須與表達式數量準確匹配,而且字段類型必須與為其分配的表達式類型兼容。
|
variable | 要為其分配 return_expression 求值結果的變量。如果指定多個return_expression 和 variable ,則第一個 return_expression 分配給第一個 variable ,第二個 return_expression 分配給第二個 variable ,以此類推。在 INTO 關鍵字之后指定的變量數量必須與在 RETURNING 關鍵字之后的表達式數量準確匹配,而且變量類型必須與為其分配的表達式類型兼容。
|
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;