Триггер для проверки наличия номера отдела в таблице отделов перед вставкой или обновлением записи в таблице сотрудников - PullRequest
0 голосов
/ 02 апреля 2020

Я создал триггер следующим образом:

create or replace trigger t4
before insert or update on employee1
for each row
declare
cursor c1 is select depno from department where
depno=:new.depno;
c2 c1%rowtype;
begin
  open c1;
  fetch c1 into c2;
  if(c1%found) then 
    raise_application_error(-20008,'No such department');
  end if;
  close c1;
end;

Он был успешно создан. Вот так выглядит мое отношение employee1:

EMPNO   EMPNAME     DESIGNATION     DATEOFJOIN  SALARY  DEPNO   GRADE
101     Sharon      Manager         01-JAN-00   10000   1        D
102     Gayathri    Manager         01-JAN-00   10000   1        D
103     Sharmi      HR              02-FEB-00   9900    3        D
111     Raj         Salesman        05-JAN-00   5000    1        D

Так выглядит отношение моего отдела например:

DEPNO   DEPNAME     DEPLOCATION
1       Marketing   block a
3       Production  block c

Я попытался вставить строку в отношение employee1, чтобы проверить, работает ли мой триггер ..

Insert into employee1 values(110,'Shan','Manager','01-JAN-00',10000,2,'D');

Но появляется следующая ошибка:

ORA-02291: integrity constraint (SYSTEM.SYS_C004025) violated - parent key not found

Но я хочу, чтобы ошибка, которую я вызвал в триггере, отображалась Я знаю, что это плохая идея сделать что-то подобное. Но я должен сделать это для моего задания. Не могли бы вы помочь мне с этим?

1 Ответ

0 голосов
/ 02 апреля 2020

Разве это не должно быть

if(c1%NOTfound)
      ---
      ???
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...