2016-05-31 78 views
0

我是与数据库相关的新事物。我有我的学校作业。它要求我为员工工资更新时创建一个触发器。问题是:Oracle - 尝试创建触发器,但不断收到编译错误导致的触发器。

“假设STA有一条规则说明员工的薪水不能超过原始薪资的20%。创建一个触发器salary_change来强制执行此约束。触发器触发每当有更新时当规则被违反salaryin employeetableand输出相应的错误信息。“

表的结构可用here

下面是我做了但编译错误创建的代码。

create or replace trigger salary_change 
before update of emp_salary on employee 
for each row 
begin 
if :new.emp_salary > :emp_salary * 1.2 then 
raise_application_error(-20000, ('New salary for employee ' || emp_name || ' is getting more than 20% raise')); 
end if; 
end; 
/

回答

0

你可以(也应该)使用:old更新之前提到的记录:

if :new.emp_salary > :old.emp_salary * 1.2 then 
    -- Here ---------^ 
+0

我可以知道什么时候我应该用“:”?在我的导师给出的例子中,有时会使用new.emp_salary,但有时会使用new.emp_salary。 “:”有时也与“=”一起使用。 – Lewis

+0

我添加了old.emp_salary,但仍然收到编译错误导致的触发器。 – Lewis