2015-11-02 45 views
-1

我寫了這個觸發器來更新某個列。我寫的觸發器是這樣的:如何在Oracle中與用戶系統日期比較來更新列?

CREATE TRIGGER updateotMark 
BEFORE UPDATE 
ON sBookBorrow 
FOR EACH ROW 
WHEN(SYSDATE-to_date(etime)>15) 
BEGIN 
UPDATE otMark = 1; 
END; 
/

這是我第一次使用觸發器,所以我不知道哪裏出了問題。有任何想法嗎?謝謝大家的回答。

更新:這是我在控制檯中得到的。我做錯了什麼? enter image description here

UPDATE2:現在有一個錯誤信息:ERROR第5行: ORA-04076:無效的新的或舊規範

+2

你想實現什麼邏輯?你有什麼結果/錯誤? – Hawk

+0

當系統日期比etime(這是一個日期)多15天時,我想讓otmark成爲1它不能運行,我什麼也沒有。 – DevArenaCN

+0

忽略此評論 – Adish

回答

0

什麼是「etime」的數據類型?

如果是日期,則不需要使用「TO_DATE」功能。例如(SYSDATE - etime> 15)

如果VARCHAR2,則需要放置格式。恩。 TO_DATE(etime,'YYYYMMDD')

但是,在SQLPlus中使用SHOW將爲您提供有關錯誤的更多信息。

SHOW ERROR TRIGGER updateotMark; 

試試吧。

CREATE OR REPLACE TRIGGER updateotMark 
BEFORE UPDATE 
ON sBookBorrow 
FOR EACH ROW 
    WHEN (SYSDATE - NEW.etime > 15) 
BEGIN 
    :NEW.otmark := 1; 
END; 
+0

觸發器沒有錯誤,但在創建觸發器時收到錯誤消息:錯誤在第5行: ORA-04076:無效的NEW或OLD規範 – DevArenaCN

+0

請嘗試使用SYSDATE - NEW.etime> 15。 –

+0

它使用警告說警告:觸發器編譯錯誤創建。 – DevArenaCN

0

只需更新:新的價值

CREATE TRIGGER updateotMark 
BEFORE UPDATE 
ON sBookBorrow 
FOR EACH ROW 
WHEN(SYSDATE-to_date(etime)>15) 
BEGIN 
:new.otmark = 1; 
END; 
+0

我在更新中放置了我的控制檯的屏幕截圖。任何想法爲什麼發生? – DevArenaCN

+0

我想你會收到錯誤信息,因爲你需要指定你在「WHEN(SYSDATE-to_date(etime)> 15)」中使用的etime是來自新的還是舊的。 – Adish