【问题标题】:execute trigger after one hour Oracle一小时后执行触发器 Oracle
【发布时间】:2015-06-06 21:07:44
【问题描述】:

我正在尝试编写触发器。要求是,每当ticketing_table 的ticket_status 列有更新时,我需要在一小时后将列值从“正在工作”更改为“已完成”。我不确定触发器是否是最好的方法。如果创建触发器是唯一的方法,需要一些建议 - 如果是,那么我们如何指定时间间隔来满足这样的要求?任何帮助,将不胜感激 。谢谢。

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;

【问题讨论】:

  • 不,触发器不是这样做的方法。
  • 嗯...我也有同样的看法。但是那我该如何实现这个功能呢?我应该在我正在创建的触发器中引入类似于 sleep 的东西吗?
  • 创建一个 Oracle 作业。将计时器设置为每隔几分钟重复一次工作。在工作中,只需使用早于 1 小时的日期更新每个“工作”行的状态。单线
  • 使用触发器中的 DBMS_JOB 创建作业。这样做的好处是,如果原来的更新没有提交或者回滚,作业也会被回滚,不会执行。

标签: sql oracle triggers oracle10g eventtrigger


【解决方案1】:

我会这样做

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
                          );

这段代码会创建一个job,创建后1小时内启动,然后删除

【讨论】:

  • 这是一个不错的选择。我有这个想法。但是我没有这样做的特权。我仍在考虑是否有其他方法可以做到这一点。当然,我同意这是最好的方式。
猜你喜欢
  • 2015-10-31
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 2021-04-30
  • 1970-01-01
  • 2014-06-30
相关资源
最近更新 更多