验证emp是否是oracle中的管理器

时间:2011-12-25 16:15:27

标签: sql oracle oracle10g

我正在尝试构建一个不允许用户向员工提供高于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实际附带的模式。

2 个答案:

答案 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中的员工。