2015-04-02 40 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