2012-05-21 249 views
2

我有一個表爲Studentvarchar類型列爲status。我需要在此表上爲此statusafter insert or update過程設置值。我試圖爲此寫一個Trigger。但我不能使用:new.status。它給出Error: ORA-04084: cannot change NEW values for this trigger type。我怎麼能這樣做?插入更新觸發器後PL/SQL

我的代碼

create or replace 
TRIGGER STUDENT_AIU_TRI 
AFTER INSERT OR UPDATE ON STUDENT 
FOR EACH ROW 
DECLARE 

v_status VARCHAR2(2); 

BEGIN 


    v_status := '1'; 

    select v_status into :NEW.status from dual; 
END; 
+1

局部變量或SELECT發佈您的代碼,請 – Bohemian

+0

@Bohemian我已經更新我的職務,並加入我的代碼。 – Bishan

回答

7

如果你想在一列更改值,你需要使用一個BEFORE INSER OR UPDATET觸發,而不是一個AFTER INSERT OR UPDATE觸發。爲什麼你認爲你需要使用一個AFTER INSERT OR UPDATE觸發器?

你也不需要從雙

CREATE OR REPLACE TRIGGER trigger_name 
    BEFORE INSERT OR UPDATE ON student 
    FOR EACH ROW 
BEGIN 
    :new.status := '1'; 
END; 
+0

不是'BEFORE INSERT OR UPDATE trigger'讓我陷入任何回滾問題?因爲在這種情況下,在插入或更新該記錄中的其他列之前設置「status」列的值。在任何情況下回滾,是不是讓我陷入任何問題? – Bishan

+0

@Bishan - 我不確定我是否理解你問的問題。觸發器所做的更改(無論是before語句,after語句還是之前或之後的行級觸發器)是整體事務的一部分。如果事務回滾,它們將被回滾。 –