删除表中的行。
语法
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);