我正在尝试构建一个不允许用户向员工提供高于10,000工资的触发器,但如果员工是经理,我不希望用户能够提供低于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,这是在Scott模式上运行的,默认情况下是Oracle实际附带的模式。
答案 0 :(得分:2)
如果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 :(得分:1)
我认为你应该与所有经理一起创建一个表(不是临时的)。
之后,检查员工是否是经理是非常容易的,通过在该表上进行简单的选择,您可以看到薪水应该是多少。
要确定员工应该在桌面上的内容,那就是mgr column
中的员工。