2015-07-20 7 views
0

Я хочу получить количество строк, сколько записей было удалено. Ниже запрос возвращает количество записей, которые будут затронуты, ноПолучить количество записей удалено 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, то я запускаю второй запрос, чтобы удалить записи.

+0

Как вы вызова этого SQL? Это важно, потому что большинство инструментов автоматически возвращают количество затронутых записей при запуске команды DELETE. Например, в JDBC-архитектуре Java команда 'executeUpdate' возвращает целое число, представляющее число, удаленное или обновленное (в зависимости от SQL). – schtever

+0

Как насчет @@ ROWCOUNT? – BBauer42

+1

Вы должны использовать предложение 'RETURNING INTO'. Точный метод зависит от того, как вы делаете вызов, но документация находится здесь: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/returninginto_clause.htm#LNPLS01354. –

ответ

4

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

Вы можете использовать DECLARE @countDelete INT набор NOCOUNT на удалить имя_таблицы где .. выбрать @@ ROWCOUNT

Смежные вопросы