2013-08-22 240 views
4

創建觸發器我有這兩個表:用case語句

USERS(username, role_id) 
COMMISSION_RATES(username, commission_rate) 

users.username是主鍵,commission_rates.username是一個外鍵。

我想寫一個觸發器,在用戶插入後,檢查role_id = 2,然後插入commission_ratesusers.username,0爲佣金率。

這是我迄今爲止,它不工作雖然:

create or replace TRIGGER SETCOMISSIONRATE 
AFTER INSERT ON USERS 
BEGIN 
    CASE 
    WHEN users.role_id = 2 THEN 
     INSERT INTO COMISSION_RATE 
      (username, 
      comission_rate) 
     VALUES (
      :NEW.username, 
     0) 
END; 

任何幫助,將不勝感激

+0

認爲你需要一個分號insert語句後 –

回答

1

WHEN條件必須在定義部分,而不是身體。它們只能用於行觸發。

create or replace 
TRIGGER SETCOMISSIONRATE 
AFTER INSERT ON USERS 
FOR EACH ROW 
WHEN (NEW.role_id = 2) 
BEGIN 
    INSERT INTO COMISSION_RATE 
    (username, 
    comission_rate) 
    VALUES (
    :NEW.username, 
    0) 

END; 
2

應該是這樣的:

CREATE OR REPLACE TRIGGER SETCOMISSIONRATE 
AFTER INSERT ON USERS FOR EACH ROW 
WHEN (new.role_id = 2) 
BEGIN 
    INSERT INTO COMISSION_RATE (username, comission_rate) 
    VALUES (:new.username, 0); 
END; 
+0

謝謝你,當我輸入到這個SQL它強調 INSERT INTO COMISSION_RATE(broker_username,comission_rate)在紅色,並且不起作用 – user2706577

+0

我也遇到這些錯誤: 錯誤(2,5):PL/SQL:SQL語句被忽略 錯誤(3,31):PL/SQL:ORA-00933:SQL命令未正確結束 錯誤(4,4):PLS-00103:遇到符號「end-of-file」時ex執行以下操作之一:(開始case爲goto聲明結束異常退出如果循環mod空pragma用<標識符>引發返回select更新<< continue close current delete讀取鎖定插入打開回滾保存點集合sql執行提交forall合併管道清除 – user2706577

+0

我在一段時間內沒有在oracle中編程,但在插入值之後添加';'應該可以做到這一點。 – Meldor