Вы можете использовать атрибут неявного курсора sql%rowcount
, чтобы увидеть, сколько строк было затронуто инструкцией DML; это работает через ссылку на базу данных, а также локально:
if sql%rowcount = 0 then
dbms_output.put_line('No records to be deleted');
else
dbms_output.put_line('name '|| rec.name ||' deleted');
end if;
Вы также можете включить его в сообщения:
if sql%rowcount = 0 then
dbms_output.put_line('name '|| rec.name ||': no records to be deleted');
else
dbms_output.put_line('name '|| rec.name ||': '|| sql%rowcount ||' record(s) deleted');
end if;
Тогда вы увидите что-то вроде:
Execution started
name B: 1 record(s) deleted
name C: no records to be deleted
Execution completed
PL/SQL procedure successfully completed.
Поскольку name
, вероятно, не уникален, вы можете встретить одно и то же значение дважды, когда будете проходить через цикл; в этом случае первое удаление найдет несколько строк, а второе удаление не найдет ни одной. Вы можете избежать второго, добавив distinct
к вашему запросу курсора.
И если вы не хотите видеть, какие имена имеют и не имеют удаленных данных для удаления, вы можете использовать намного более простое одиночное удаление без цикла или PL / SQL, но, похоже, это упражнение в любом случае ...