2014-03-25 257 views
2

我在oracle數據庫中有一個表,其中有兩個字段:statusnotesstatus字段只有3個實際值:active, not-active, removed在oracle中更改另一個字段的值時更改表字段的值

  • statusactive,在默認情況下notes領域有着什麼也沒有。

  • 如果status更改爲not-active,notes將輸入值。 由用戶

  • 如果status更改回active,我需要notes字段值刪除。

我從來沒有使用觸發器之前,所以對我來說這是一個有點複雜,但這裏是我有:

CREATE TRIGGER update_notes 
AFTER UPDATE ON table1 
FOR EACH ROW 
BEGIN 
IF status = 'Active' THEN UPDATE table1 SET notes = ''; 
END IF; 
END; 

但它沒有。什麼我錯過了?

回答

3

不要使用update聲明,只是指定值:

CREATE TRIGGER update_notes 
BEFORE UPDATE ON table1 
FOR EACH ROW 
BEGIN 
    IF :new.status = 'Active' THEN 
    :new.notes = null; 
    END IF; 
END; 

BTW:表有,而不是 「田」

+0

現在我已經完全不同了:04084. 00000 - 「無法更改此觸發的NEW值r類型「 *原因:只能在行 插入或更新觸發器之前更改新的觸發器變量。 *操作:更改觸發器類型或刪除變量引用 – Dims

+0

@ user3065540:抱歉,我沒有看到您正在使用「AFTER」觸發器。當然,您需要使用'BEFORE'觸發器(請參閱我的編輯) –

+0

謝謝a_horse_with_no_name!這一個:CREATE TRIGGER update_notes BEFORE UPDATE ON VP_DET FOR EACH ROW BEGIN IF:new.VP_STATUS = '有效' THEN :new.VP_STATUS_NOTES:= ''; END IF; END;成功了! – Dims

0

能否請您嘗試以下..

CREATE TRIGGER update_notes  
AFTER UPDATE ON table1 
FOR EACH ROW 
BEING 
    IF :NEW.status = 'Active' THEN 
    :NEW.notes = ''; 
    END IF; 
END; 
/
+0

謝謝,但這個也失敗了.. – Dims

+0

在Oracle中沒有'插入' –

+0

@a_horse_with_no_name你對我親愛的..我可以改變我的報價。所以如果有人對此博客進行評論,那麼他們就不會感到困惑。 –

相關問題