SQL Получить общее количество удаленных строк в файле с несколькими запросами DELETE. - PullRequest
0 голосов
/ 30 апреля 2020

Я поместил пример

В скрипте SQL с сотней или более запросами на удаление результат должен быть следующим: Примечание. Удаление не может быть выполнено с использованием уникального запроса на удаление. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. 1 строка удалена. Фиксация завершена.

Можно ли получить общее количество удаленных строк, например.

1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.
1 row deleted.

16 row deleted.
Commit complete.

Я также могу быть действительным для команд обновления или вставки.

1 Ответ

1 голос
/ 30 апреля 2020

SQL%ROWCOUNT - вот что приходит на ум. Однако, к сожалению, я не могу заставить его работать на уровне SQL. Вот пример: это скрипт. SQL, который устанавливает переменную, удаляет некоторые строки из двух таблиц и пытается вычислить общее количество удаленных строк.

var total number;

delete from a where deptno = 10;
exec :total := nvl(:total, 0) + sql%rowcount;

delete from b where deptno = 10;
exec :total := nvl(:total, 0) + sql%rowcount;

print total

Когда я его запустил, я получил:

SQL> @p

3 rows deleted.


PL/SQL procedure successfully completed.


1 row deleted.


PL/SQL procedure successfully completed.


     TOTAL
----------

Итого составляет NULL, потому что SQL%ROWCOUNT равно NULL (я знаю; я пробовал с NVL(SQL%ROWCOUNT, -1) и в результате получил -2.


Но если вы переключитесь на PL / SQL - что может быть возможно, заключив ваши операторы DELETE в BEGIN-END - тогда есть некоторое улучшение Новый. SQL скрипт:

set serveroutput on
declare
  l_total number := 0;
begin
  delete from a where deptno = 10;
  l_total := l_total + sql%rowcount;

  delete from b where deptno = 10;
  l_total := l_total + sql%rowcount;

  dbms_output.put_line('Deleted total of ' || l_total || ' rows');
end;
/

Тестирование:

SQL> @p
Deleted total of 4 rows

PL/SQL procedure successfully completed.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...