У меня есть функция PL / SQL (работает на Oracle 10g), в которой я обновляю некоторые строки. Есть ли способ узнать, на сколько строк повлияло ОБНОВЛЕНИЕ? При выполнении запроса вручную он сообщает мне, сколько строк было затронуто, я хочу получить это число в PL / SQL.
oracle
plsql
sql-update
Томас Лётцер
источник
источник
INSERT INTO
...COMMIT
и в той же процедуре после вставки, у меня естьUPDATE SET WHERE EXISTS..COMMIT
, но мойi := SQL%rowcount;
возвращает все строки вместо строк, которые были только обновлены. Что может быть?Для тех, кто хочет получить результаты от простой команды, решение может быть:
Основная проблема заключается в том, что SQL% ROWCOUNT является переменной (или функцией) PL / SQL, и к ней нельзя получить прямой доступ из команды SQL. С помощью блока PL / SQL без имени это может быть достигнуто.
... Если у кого-то есть решение использовать его в команде SELECT, мне было бы интересно.
источник
в качестве альтернативы,
SQL%ROWCOUNT
вы можете использовать это в процедуре без необходимости объявлять переменнуюисточник
SQL%ROWCOUNT
также может использоваться без назначения (по крайней мере, из Oracle 11g ).Пока в текущем блоке не было выполнено ни одной операции (обновления, удаления или вставки),
SQL%ROWCOUNT
устанавливается нулевое значение. Затем он остается с номером строки, затронутой последней операцией DML:скажем у нас есть таблица КЛИЕНТ
Мы бы проверили это так:
В результате чего:
источник
2 клиента обновлены для 1
нет клиента с 2 val_cli.
нет клиента с 3 val_cli.
1 клиент обновлен для 4
нет клиентов с 5 val_cli.
1 клиент обновлен для 6
нет клиента с 7 val_cli.
нет клиента с 8 val_cli.
нет клиента с 9 val_cli.
1 клиент обновлен за 10
Количество строк, затронутых операцией обновления: 5
источник
Используйте аналитическую функцию Count (*). OVER PARTITION BY NULL Это будет считать общее количество строк
источник