Изменение условия для процедуры PL / SQL - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть процедура PL / SQL для удаления записей, соответствующих полю, имеющему значение NULL. Я могу достичь этого по следующему запросу.

set serveroutput on;

begin
    dbms_output.put_line('Execution started');

    for rec in (
        select name from employee where emp_id is null
        and location = 'SITE_A'
    )
    loop
        delete from employeedetails@sitea where name = rec.name;
        dbms_output.put_line('name '|| rec.name ||' deleted');
    end loop;

    dbms_output.put_line('Execution completed');
end;
/

set serveroutput off;

Я выполняю запрос цикла for из одной базы данных и удаляю записи в другой базе данных ( sitea ), используя ссылку на базу данных.

Мне нужно добавить условие, например, если name=rec.name не возвращает ни одной записи для удаления, тогда dbms_output.put_line('No records to be deleted');

Есть ли удобный способ добиться этого?

1 Ответ

0 голосов
/ 09 ноября 2018

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

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