выполнить триггер через час Oracle

Я пытаюсь написать триггер. Требование состоит в том, что всякий раз, когда происходит обновление столбца ticket_status таблицы ticketing_table, мне нужно изменить значение столбца (изменить статус) с «Работает» на «Завершено» ровно через час. Я не уверен, что триггер - лучший способ сделать это. Нужен совет, если создание триггера - единственный способ - если да, то как указать временной интервал для удовлетворения такого требования? Любая помощь будет оценена по достоинству. Спасибо.

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;

person Zack    schedule 02.04.2015    source источник
comment
Нет, триггер - не способ сделать это.   -  person Mitch Wheat    schedule 02.04.2015
comment
хм... я был того же мнения. Но тогда как мне добиться этой функциональности? Должен ли я ввести что-то похожее на сон в триггере, который я создаю?   -  person Zack    schedule 02.04.2015
comment
создать задание Oracle. Установите таймер на повторение задания каждые несколько минут. В задании просто обновите их статус каждой строки «Работает», указав дату раньше, чем на 1 час. Однострочник   -  person cha    schedule 02.04.2015
comment
Создайте задание, используя DBMS_JOB из триггера. Преимущество этого заключается в том, что если исходное обновление не зафиксировано или откатывается, задание также будет откатываться и не будет выполняться.   -  person Jeffrey Kemp    schedule 02.04.2015


Ответы (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
                          );

Этот фрагмент кода создаст задание, которое будет запущено через 1 час после создания, а затем удалено.

person finidigeorge    schedule 02.04.2015
comment
это хороший вариант. Я имел это в виду. Но тогда у меня нет привилегии сделать это. Я все еще думаю, есть ли другой способ сделать это. Конечно, я согласен, что это лучший способ. - person Zack; 02.04.2015