Не думаю, что это даже скомпилируется. Кроме того, вы не должны делать это таким образом (как вам уже сказали). Еще несколько возражений, если можно (в связи с первоначальным вопросом: правильно ли вы используете IF
).
Связка первых IF
с может быть сокращена на OR
:
IF p_employeeid IS NULL OR
p_employeename IS NULL OR
p_jobid IS NULL OR
p_salary < 0
THEN
RAISE VALUE_ERROR;
END IF;
Вы не можете ссылаться на табличные значения таким образом, например
IF p_jobid != employees.jobid THEN /* if jobid entered is not in the table */
RAISE VALUE_ERROR;
END IF;
Там нет employees.jobid
- вы должны сначала выбрать его. Например:
declare
l_cnt;
begin
select count(*)
into l_cnt
from employees e
where e.jobid = p_jobid;
if l_cnt = 0 then -- there's no such job in the table
raise value_error;
end if;
end;
Наконец, условие final , которое вы проверили и попытались поднять что-то
RAISE RAISE_APPLICATION_ERROR(-2000);
неверно по 3 причинам:
- Вы не
RAISE RAISE_...
- Пользовательский диапазон исключений составляет от
-20001
до -20999
(пять цифр, а не 4)
RAISE_APPLICATION_ERROR
требует еще один аргумент
так - правильно - вы бы
raise_application_error(-20001, 'That does not exist');