Получить количество удаленных записей sql

Я хочу получить количество строк, сколько записей было удалено. Приведенный ниже запрос возвращает количество записей, которые будут затронуты, но

SELECT COUNT(*) FROM suppliers
WHERE EXISTS
  ( SELECT customers.customer_name
    FROM customers
    WHERE customers.customer_id = suppliers.supplier_id
    AND customer_id > 25 );

Мне нужно что-то вроде этого, после того, как строки были удалены, я могу показать количество записей, которые были удалены на внешнем интерфейсе.

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 ));

Я не хочу запускать запрос дважды, один раз, чтобы получить количество записей, которые будут удалены, если оно больше 0, я запускаю второй запрос, чтобы удалить записи.


person user525146    schedule 20.07.2015    source источник
comment
Как вы вызываете этот SQL? Это важно, поскольку большинство наборов инструментов автоматически возвращают количество затронутых записей при выполнении команды DELETE. Например, в архитектуре JDBC Java команда executeUpdate возвращает целое число, представляющее число удаленных или обновленных (в зависимости от SQL).   -  person schtever    schedule 20.07.2015
comment
А как насчет @@ROWCOUNT?   -  person BBauer42    schedule 20.07.2015
comment
Вы должны использовать предложение RETURNING INTO. Точный метод зависит от того, как вы выполняете вызов, но документация находится здесь: docs.oracle.com/cd/E11882_01/appdev.112/e25519/.   -  person Gordon Linoff    schedule 20.07.2015
comment
@schtever Я использую службы модели REST для вызова запроса, все, что я получаю, это json и jquery jsonp для вызова.   -  person user525146    schedule 20.07.2015


Ответы (2)


Вы можете использовать предложение 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;
person Gordon Linoff    schedule 20.07.2015

Вы можете использовать declare @countDelete int set nocount для удаления имени таблицы, где .. выберите @@ROWCOUNT

person cutit    schedule 20.07.2015