更新表的行。
文法
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;