2016-05-31 51 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