Давайте начнем с утверждения, что использование триггеров для обеспечения целостности отношений вместо ограничений внешнего ключа является наихудшей практикой.Триггеры RI медленны, они плохо масштабируются, они не работают в многопользовательских средах, они провоцируют ненужные царапины на голове у бедняжек, которым приходится поддерживать код.
Итак, этокак должен выглядеть функционирующий наихудший триггер:
create or replace trigger section_timeslot_trg
before insert or update on section
for each row
declare
l_id timeslot.timeslot_id%type;
begin
select ts.timeslot_id
into l_id
from timeslot ts
where ts.timeslot_id = :new.timeslot_id;
exception
when no_data_found then
raise_application_error(-20999, 'Not a valid TIMESLOT_ID: '||:new.timeslot_id);
end;
Помните, что в отсутствие ограничения внешнего ключа должен быть обратный триггер для TIMESLOT, чтобы предотвратить обновления и удаления TIMESLOT_ID, которые используются вРАЗДЕЛ.