Skip to content

DELETE

删除表中数据。

语法格式

sql
deletestmt::=
    DELETE del_targ_tab [ opt_from_clause ] [ opt_where_clause ] [ opt_returning ] [ opt_bulk ] [ opt_into_list ]
|   DELETE del_targ_tab [ opt_from_clause ] WHERE CURRENT OF name [ opt_returning ] [ opt_bulk ] [ opt_into_list ]

参数说明

  • del_targ_tab:删除数据的表或视图名,前面也可加上相应的模式名;名称前可加或不加关键字 FROM。
  • opt_from_clause:可选的 FROM 从句,用于从另一个或多个表中查询结果作为目标删除数据的定位条件。
  • opt_where_clause:可选的 WHERE 从句,用于对从表中查询出的数据做过滤或限制。
  • WHERE CURRENT OF name:通常用于游标删除时的定位条件。
  • opt_returningopt_into_list:可选的关键词,用于把删除后的数据输出至指定的变量或数据结构。
  • opt_bulk:可选关键词,用于修饰 opt_returning opt_into_list 关键词,指定该关键词后把结果一次性输出,而不是每次输出一行数据。

示例

  • 示例1

    sql
    DELETE t1 WHERE c3 = '2005-05-05';
  • 示例2

    sql
    DELETE FROM t2 b FROM t1 a WHERE a.c1 = b.c1 AND a.c3 > '2003-01-01';
  • 示例3
    删除时将结果 RETURNING。

    sql
    DECLARE
      TYPE type_table_1 IS TABLE OF t1%ROWTYPE;  -- UDT类型:T1 行类型的嵌套表
      var_t1 TYPE_TABLE_1;                       -- UDT类型变量,用来保存游标中查询的数据
      TYPE type_c3 IS TABLE OF t2.c2%TYPE;       -- UDT类型:DATE 类型的嵌套表
      var_c3 TYPE_C3;                            -- UDT类型变量,用来保存 RETURNING 的值
      CURSOR cur IS SELECT * FROM t1;
    BEGIN
      OPEN cur;
      FETCH cur BULK COLLECT INTO var_t1;
      DELETE FROM t2 WHERE t2.c1 = (var_t1(4).c1 + 1)
        RETURNING c3 BULK COLLECT INTO var_c3;
      -- 如果需要,可把 RETURNING 的数据输出至屏幕或表中
      FOR i IN 1..var_c3.COUNT() LOOP
        SEND_MSG(var_c3(i));
      END LOOP;
    END;