Проверка того, является ли emp менеджером в Oracle - PullRequest
2 голосов
/ 25 декабря 2011

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

То, что я до сих пор достиг, - это следующее:

create or replace trigger sal_check 
before update or insert on emp
for each row
begin 
if :new.sal > 10000
then
update emp set sal = 10000;
end if;
end;

Теперь я могу дать подсказку, как сделать проверку, является ли работник менеджером или нет?

Примечание: я использую Oracle, и он работает по схеме Скотта, которая по умолчанию поставляется с Oracle.

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

Если в таблице emp есть столбец mgr, и вы установили ограничение внешнего ключа, достаточно просто проверить, не является ли поле mgr пустым. Кроме того, update emp set sal = 10000; в вашем коде вызовет ORA-04091 (таблица мутирует), вам нужно изменить его на :new.sal := 1000. Таким образом, ваш триггер будет выглядеть как

...
 if :new.mgr IS NULL THEN
   if :new.sal > 10000
    then
   :new.sal := 10000;
   end if;
 ELSE
 if :new.sal < 15000
    then
   :new.sal := 15000;
   end if;
 END IF;
1 голос
/ 26 декабря 2011

Я думаю, что вы должны создать таблицу (не временную) со всеми менеджерами.

После слов было бы довольно легко определить, является ли сотрудник менеджером или нет, и просто сделать выборВ таблице вы могли видеть, какой должна быть зарплата.

Чтобы определить, какие сотрудники должны быть на столе, это будут те, которые в mgr column.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...