Не забудьте решение из @ липкого бита на будущее.
Возвращаясь к вашему требованию, я считаю, что вы придерживаетесь этого с одним анонимным блоком и с параметризованным курсором. (исправьте меня, если я ошибаюсь)
если да, я бы изменил следующее, и он должен работать за вас.
Измените курсор на ниже, для других вы передаете null в качестве параметра и в предложении where мы можем обработать то же самое. (когда значение передается как 10 или 20, он будет сравнивать, а при нулевом значении он будет обновляться для всех, кроме 10 и 20)
CURSOR sal_increase(v_dno NUMBER) IS
SELECT empno
,sal
,ename
,deptno
FROM emp
WHERE ( v_dno IS NOT NULL AND deptno = v_dno
OR v_dno IS NULL AND deptno NOT IN (10,20)
);
Затем снова вызовите cusrosr, как вы делали для 10 и 20, еще раз как показано ниже,
OPEN sal_increase(v_dno => NULL);
LOOP
FETCH sal_increase
INTO emp_record;
EXIT WHEN sal_increase%NOTFOUND;
UPDATE emp SET sal = sal * 0.05 WHERE empno = emp_record.empno;
dbms_output.put_line(emp_record.ename || ' ' || emp_record.deptno);
END LOOP;
CLOSE sal_increase;