Проблема с триггером в том, что он не связывается с исполняемым кодом.Так что триггер не годится, если нам нужно, чтобы наша программа выбрала одну или несколько разных веток в зависимости от результата оператора UPDATE.
Мы можем использовать sql%found
(или sql%notfound
), чтобы проверить, касалось ли наше утверждение DML каких-либо записей.
UPDATE Table1
SET value = 3
WHERE id = 1;
if sql%found then
dbms_output.put_line('record updated');
else
dbms_output.put_line('record NOT updated');
end if;
Если у нас есть утверждение, которое может повлиять на несколько записей, мыможно использовать sql%count
для получения количества затронутых записей.
UPDATE Table1
SET value = 3
WHERE id > 123;
dbms_output.put_line('No of records updated = ' || sql%count);
Если вы хотите получить обновленное значение, используйте предложение returning into
:
UPDATE Table1
SET value = value + 3
WHERE id = 1
returning value into l_value;
dbms_output.put_line('updated value = ' || l_value);