Скорее всего, - это другой вариант.
Из того, что вы описали, вы делаете это в al oop, что предполагает, что он влияет только на одну строку за раз (на основе в предложениях where
и sql%rowcount = 1
; если бы было много строк, вы бы отметили >= 1
). Такой подход обычно означает, что строка за строкой идет медленно-медленно.
Посмотрите, можете ли вы сделать это на множествах , а не на единственных строках . Удалите l oop полностью.
Например, если это то, что у вас есть сейчас:
begin
for cur_r in (select deptno, empno
from emp
where job = 'CLERK'
)
loop
update emp set sal = sal + 100
where empno = cur_r.empno;
if sql%rowcount = 1 then
update dept set
dname = dname || 'x'
where deptno = cur_r.deptno
end if;
end loop;
end;
переписать его на
begin
update emp e set
e.sal = e.sal + 100
where e.job = 'CLERK'; --> condition from the cursor FOR loop
update dept d set
d.dname = d.dname || 'x'
where d.deptno in (select e.deptno --> SELECT used in
from emp e --> cursor FOR
where e.job = 'CLERK' --> loop
);
end;