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.
Если это удовлетворяет ваши потребности, хорошо. Если нет, боюсь, я бы не знал, как делать что хочешь.