获取删除的SQL记录数

use*_*146 2 sql oracle rowcount sql-delete

我想获取已删除多少记录的行数。下面的查询返回将受影响的记录数,但是

SELECT COUNT(*) FROM suppliers
WHERE EXISTS
  ( SELECT customers.customer_name
    FROM customers
    WHERE customers.customer_id = suppliers.supplier_id
    AND customer_id > 25 );
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西,在删除行之后,我可以在前端显示已删除的记录数。

SELECT COUNT(*) FROM suppliers(
DELETE from supplier(
    WHERE EXISTS
      ( SELECT customers.customer_name
        FROM customers
        WHERE customers.customer_id = suppliers.supplier_id
        AND customer_id > 25 ));
Run Code Online (Sandbox Code Playgroud)

我不想运行查询两次,一次查询要删除的记录数,如果大于0,则运行第二次查询删除记录。

Gor*_*off 7

您可以使用该RETURNING INTO子句删除所有要删除的行,然后对它们进行计数。

仅计算数量的更简单方法是SQL%ROWCOUNT使用PL / SQL代码。像这样:

BEGIN
    DELETE from supplier(
        WHERE EXISTS
          ( SELECT customers.customer_name
            FROM customers
            WHERE customers.customer_id = suppliers.supplier_id
            AND customer_id > 25 );
    dbms_output.put_line(SQL%ROWCOUNT);
END;
Run Code Online (Sandbox Code Playgroud)