Гордон прав, предпочтительно использовать ограничение внешнего ключа для этого сценария.
Проблема с вашим кодом (за исключением ошибки, на которую указывал Гордон) заключается в том, что в отличие от немногих других СУБД, таких как Postgres, в Oracle вы не можете использовать EXISTS
в выражениях / выражениях PL / SQL, таких как IF
,Это должен быть чисто SQL-оператор.
create or replace trigger BIM
before insert on TABLE1
for each row
declare
l_id_exists INT;
begin
select CASE WHEN
exists (select 1 from TABLE2 where TABLE2.ID = :new.ID)
THEN 1
ELSE 0 END INTO l_id_exists from dual;
if l_id_exists = 0
then
raise_application_error(-20634, 'Error');
end if;
end;
/
DEMO