2011-12-25 28 views
2

我正在嘗試構建一個觸發器,它不允許用戶向員工發放高於10,000的薪水,但如果員工是經理,我不希望用戶成爲能夠支付低於15000美元的工資。驗證emp是否是oracle中的經理

我達到到目前爲止以下

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

向我們提供關於表格的一些信息,例如,您如何知道誰是經理? – 2011-12-25 16:28:21

+0

emp表中有一列表示mgr,其中包含mgr的員工ID,因爲mgr也是員工。 當然,emp表中包含一個名爲empno的列,它的編號爲 最接近我弄清楚誰是經理是通過使用以下select語句: 從emp group中選擇mgr由mgr – Fingolfin 2011-12-25 16:32:53

+0

以及如果員工是經理本身,它也有一個值mgr欄? – 2011-12-25 16:57:14

回答

1

我認爲你應該創建一個表(不是臨時的)與所有的經理。

之後,可以很容易地檢測到員工是否是經理,並通過在該表上做出簡單選擇,您可以看到應該是什麼薪水。

要確定員工應該在桌上,應該是mgr column中的員工。

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; 
+0

根據Adel對這個問題的評論,唯一一個擁有NULL'mgr'的員工是首席執行官。 – 2011-12-25 20:49:28