删除表中的行。

语法

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_expressionvariable,则第一个 return_expression 分配给第一个 variable,第二个 return_expression 分配给第二个 variable,以此类推。在 INTO 关键字之后指定的变量数量必须与在 RETURNING 关键字之后的表达式数量准确匹配,而且变量类型必须与为其分配的表达式类型兼容。
collection 根据 return_expression 求值结果在其中创建元素的集合。可能存在单个集合(该集合可能是由单个字段组成的集合,也可能是由记录类型组成的集合),也可能存在多个集合(在这种情况下,每个集合必须由单个字段组成)。返回表达式的数量和顺序必须与所有指定集合中字段的数量和顺序匹配。每组对应的 return_expressioncollection 字段的类型必须兼容。
subquery 子查询语句。

示例

jobhist 表中删除员工 7900 的所有行:

DELETE FROM jobhist WHERE empno = 7900;

清除表 jobhist

DELETE FROM jobhist;

select * from t的结果作为一个目标对象,并删除目标对象的数据:

DELETE FROM (SELECT * FROM t);