全部產品
Search
文件中心

PolarDB:UPDATE

更新時間:Jul 06, 2024

更新表的行。

文法

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 特權才能更新表,還必須對在 expressioncondition 中讀取其值的任何錶具有 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 求值時替換該列的值:
  • 如果在 UPDATE 命令中為 return_expression 中指定的列分配一個值,則在計算 return_expression 時使用指定的值。
  • 如果未在 UPDATE 命令中為 return_expression 中指定的列分配值,則受影響的行中列的當前值將用於計算 return_expression
record要為其欄位分配 return_expression 求值結果的記錄。第一個 return_expression 分配給 record 中的第一個欄位,第二個 return_expression 分配給 record 中的第二個欄位,以此類推。record 中的欄位數量必須與運算式數量準確匹配,而且欄位類型必須與為其分配的運算式類型相容。
variable要為其分配 return_expression 求值結果的變數。如果指定多個return_expressionvariable,則第一個 return_expression 分配給第一個 variable,第二個 return_expression 分配給第二個 variable,以此類推。在 INTO 關鍵字之後指定的變數數量必須與在 RETURNING 關鍵字之後的運算式數量準確匹配,而且變數類型必須與為其分配的運算式類型相容。
collection根據 return_expression 求值結果在其中建立元素的集合。可能存在單個集合(該集合可能是由單個欄位組成的集合,也可能是由記錄類型組成的集合),也可能存在多個集合(在這種情況下,每個集合必須由單個欄位組成)。返回運算式的數量和順序必須與所有指定集合中欄位的數量和順序匹配。每組對應的 return_expressioncollection 欄位的類型必須相容。
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;