Это явно задание, поэтому вместо предоставления решения я укажу на ошибки и, где это уместно, дам вам указатель, где найти ответ, но вам нужно будет создать решение.В долгосрочной перспективе я думаю, что это принесет большую пользу.
select count ename into x from emp where sal > 0;
Этот синтаксис этого оператора недопустим.См. Функция подсчета .
update emp
set emp.sal = emp.sal+((emp.sal*4)/100);
WHERE emp.sal = enreg.sal;
Эти операторы вместе взятые также имеют неверный синтаксис.Кажется, вы думаете, точка с запятой -;- указывает на конец строки, но фактически указывает на конец оператора.Я представляю, что вам не нужен первый - он действительно действителен, но обновит каждую строку в таблице.Без этой точки с запятой будет обновляться только подмножество строк, но это подмножество будет соответствовать каждому окладу, включая уже обновленные.См. Обновление в пределах Курсора
Пара общих комментариев.
Ваша процедура содержит много ненужных повторений.3 обновите операторы для ПУОС и соответствующие варианты выбора для таблицы DEPT.Вместо этого вы можете определить переменную для процента (рассчитанного как 4,6 или 8) в зависимости от ситуации, а затем использовать эту переменную в одном обновлении.И на шаг вперед, вы можете присоединиться к DEPT к EMP в курсоре, и вам не нужно независимое выделение для каждой строки, которую вы обрабатываете.Просто способ думать об обработке наборов вместо отдельных строк.
Все в дополнение к тому, на что указал @AlexPoole.