2015-04-02 37 views
2

我正在嘗試寫一個觸發器。要求是每當ticket_status列的ticketing_table有更新時,我需要在正好一個小時後將列值更改(狀態已更改)從「工作」更改爲「已完成」。我不確定觸發是否是最好的方法。需要一些建議,如果創建觸發器是唯一的方法 - 如果是,那麼我們如何指定時間間隔來滿足這樣的要求?任何幫助,將不勝感激 。謝謝。一小時後執行觸發Oracle

create or replace TRIGGER update_status_trigger 
    after UPDATE of ticket_status ON ticketing_Table 
    for each row 
    when (new.ticket_status = 'Working') 
    BEGIN 
    :new.ticket_status := 'Completed'; 
    END; 
+2

號,觸發不要做到這一點的方法。 – 2015-04-02 02:42:01

+0

嗯...我有同樣的意見。但是,我該如何實現這一功能?我應該在我正在創建的觸發器中引入類似睡眠的東西嗎? – Zack 2015-04-02 02:44:30

+0

創建一個Oracle作業。設置計時器每隔幾分鐘重複一次作業。在工作中,只需更新每個「工作」行的狀態,並且日期早於1小時。單線程 – cha 2015-04-02 03:06:09

回答

2

我會做這樣的

DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'MY_JOB_' || to_char(systimestamp), --should be unique for each call 
          JOB_TYPE  => 'PLSQL_BLOCK', 
          JOB_ACTION => 'BEGIN 
               UPDATE ....; 
              END;', 
          ENABLED  => TRUE, 
          AUTO_DROP  => TRUE, 
          start_date => sysdate + 1/24, 
          repeat_interval=>null 
         ); 

這段代碼將創建一個工作,這將在1小時內啓動創建後,然後刪除

+0

這是一個不錯的選擇。我有這個想法。但是我沒有這個特權。我仍在考慮是否有其他方式來做到這一點。當然,我同意這是最好的方法。 – Zack 2015-04-02 04:48:22

相關問題