В вашем коде есть ошибка: old_emp.num_dep = NULL
не может работать, всегда ложно.
Предположим, это было бы old_emp.num_dep IS NULL
, тогда я думаю, что ваш код не будет работать в соответствии с вашим намерением. Исключение будет возникать в обход INSERT INTO EMP2.
Если бы это был мой код, и логика такова, что вы можете решить, что вставка в EMP2 не является реальной ошибкой в случае отсутствия отдела, я бы не стал выдвигать исключение. Вы также не теряете эту информацию, поскольку вы всегда можете видеть, что отсутствовали отделы (а именно для каждого emp с 0 в качестве отдела)
Кстати, есть ли особая причина для использования 0 для отдела? Почему бы просто не использовать NULL
? Судя по всему, вы решили, что иметь сотрудников без отдела вполне нормально, NULL
- это справедливое представление.
Если вы настаиваете, что emp на самом деле является ошибкой, если пропускаете отдел, но все равно чувствуете, что вставлять ПУО в порядке, я бы посоветовал написать так:
IF ... THEN
... -- ok
END IF;
INSERT INTO EMP2 VALUES (
old_emp.bi, old_emp.nome, old_emp.morada, old_emp.data_entrada, old_emp.data_saida,
NVL(new_ndep, 0)
);
IF new_ndep IS NULL THEN
raise dep_inexistente;
END IF;
Я призываю вас добавить некоторые комментарии в коде, потому что, если бы я нашел код, подобный тому, что я написал выше, я, вероятно, заподозрил бы ошибку.