2012-07-19 187 views
0
CREATE OR REPLACE TRIGGER Guest_Change_In_WorkingHour 
     BEFORE INSERT OR UPDATE OR DELETE ON guest 
    BEGIN 
     IF TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) < 8 -- cant do anything before 8:00am 
      OR TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) >= 5 
       -- changes must be made BEFORE 5:00pm 
      OR TO_CHAR(SYSDATE,'dy') in ('sun','sat') THEN -- nothing on weekends 
    RAISE_APPLICATION_ERROR (-20000, 'Satff changes only allowed during business hours.'); 
    END IF; 
    END; 
/

此工作時間(上午8點至下午5點)的觸發器可以執行插入,刪除和更新數據。 對於我的問題是,當時間是4.00AM仍然可以插入,刪除和更新數據。 我發現這個觸發器忽略AM和PM。 如何解決?Oracle SQL(觸發器)

回答

2

您正在使用時間格式HH24,這是24小時(美國「軍事」,我相信)時間。因此您需要這樣做:

TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) >= 17 

...而不是使用5。但事實上,它應該在任何時候提高誤差,而不僅僅是在08:00-17:00範圍之外(因爲極少數數字都是> = 8和< 5)。觸發器是否實際編譯?

此外,你需要檢查你用來比較星期幾的情況,因爲我認爲此刻不會匹配(更正 - 是的,它將與dy一致)。但依靠NLS敏感值進行比較並不理想。

+0

我嘗試它b4,改爲17但問題仍然存在。 這一天無法匹配.. – 2012-07-19 16:26:54

+0

@LONGKIT - 我測試過了,用'17',這個觸發器做了你想要的;你改變了別的嗎?如果再次嘗試它,現在只需要更改爲'17',會發生什麼情況? – 2012-07-19 16:34:19

+0

我改爲17,然後我也將我的電腦時間更改爲4.00Am,但仍可以更新記錄。 – 2012-07-19 16:40:47