刪除表中的行。
文法
DELETE [ optimizer_hint ] FROM table[subquery][@dblink ]
[ WHERE condition ]
[ RETURNING return_expression [, ...]
{ INTO { record | variable [, ...] }
| BULK COLLECT INTO collection [, ...] } ]
說明
DELETE
從指定表中刪除滿足 WHERE
子句的行。如果缺少 WHERE
子句,則會刪除表中的所有行。結果有效,但表為空白。
說明
TRUNCATE
命令提供刪除表中所有行的更快機制。僅當在 SPL 程式中使用 DELETE
命令時,才能指定 RETURNING INTO { record | variable [, ...] }
子句。另外,DELETE
命令的結果集不得包括多個行,否則會引發異常。如果結果集為空白,則將目標記錄或變數的內容設定為 null。
僅當在 SPL 程式中使用 DELETE
命令時,才能指定 RETURNING BULK COLLECT INTO collection [, ...]
子句。如果將多個 collection
指定為 BULK COLLECT INTO
子句的目標,則每個 collection
必須包含一個標量欄位,即 collection
不得為記錄。DELETE
命令結果集中可以包含零個、一個或多個行。對結果集中的每一行進行 return_expression
求值並變成 collection
中的元素,從第一個元素開始。會刪除 collection
中的所有現有行。如果結果集為空白,則 collection
也將為空白。
您必須具有 DELETE
特權才能刪除表中內容,並對所有需要滿足條件才能讀取其值的所有表具有 SELECT
特權。
參數
參數 | 說明 |
optimizer_hint | 向最佳化程式提供的注釋嵌入式提示,用於選擇執行計畫。 |
table | 現有表的名稱(可能是 schema 限定的)。 |
dblink | 用於標識遠端資料庫的 database link 名稱。有關 database link 的資訊,請參見 CREATE DATABASE LINK 命令。 |
condition | 一個值運算式,用於返回 BOOLEAN 類型的值,以確定要刪除哪些行。 |
return_expression | 可能包括 table 中一列或多列的運算式。如果在 return_expression 中指定 table 中的列名稱,則在對 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 | 子查詢語句。 |
樣本
從 jobhist
表中刪除員工 7900 的所有行:
DELETE FROM jobhist WHERE empno = 7900;
清除表 jobhist
:
DELETE FROM jobhist;
將select * from t
的結果作為一個目標對象,並刪除目標對象的資料:
DELETE FROM (SELECT * FROM t);