当变量超过/超过特定日期时如何触发触发器

时间:2015-05-11 12:14:11

标签: sql database oracle triggers oracle-sqldeveloper

我有一个类型为“DATE”的表格,我希望在atributte达到特定日期时触发一个触发器。

例如:

Table A:
        a int primary key;
        d Date;

A(1, '15-05-2015');

当这个日期到来时,我想发射一个特定的触发器。

感谢。

4 个答案:

答案 0 :(得分:2)

根据Oracle的trigger documentation

  

您可以编写触发器,只要执行以下任一操作即可触发   操作发生:

  1. DML语句(INSERT,UPDATE,DELETE)on   由任何用户发布的特定表格或视图
  2. DDL   语句(主要是CREATE或ALTER)由特定的语句发出   架构/用户或数据库中的任何架构/用户
  3. 数据库   还发布了事件,例如登录/注销,错误或启动/关闭   由特定架构/用户或由任何架构/用户   数据库

不幸的是,约会的到来不是其中之一。

但是,您可以创建一个在特定日期运行并执行Oracle过程的Oracle作业

Oracle的job creation documentation说明了如何做到这一点:

BEGIN DBMS_SCHEDULER.CREATE_JOB (    job_name           => 
'update_sales',    job_type           =>  'STORED_PROCEDURE',   
job_action         =>  'OPS.SALES_PKG.UPDATE_SALES_SUMMARY',   
start_date         =>  '28-APR-08 07.00.00 PM Australia/Sydney',   
repeat_interval    =>  'FREQ=DAILY;INTERVAL=2', /* every other day */ 
end_date           =>  '20-NOV-08 07.00.00 PM Australia/Sydney',   
job_class          =>  'batch_update_jobs',    
comments           =>  'My new job'); 
END; 
/

job_action ”字段接收要执行的过程的名称,并且“ repeat_interval ”将被留空以进行一次执行。

答案 1 :(得分:0)

您可以为每个行触发创建一个插入/更新,每次在此表上插入/更新时都会触发。在触发器主体中,您可以测试

if :new.d = to_date('2015-05-15','yyyy-mm-dd') then
  --put you code here
end if;

答案 2 :(得分:0)

你可以试试这个

CREATE OR replace TRIGGER trg_ex
   AFTER UPDATE OR DELETE ON ex1
      FOR EACH ROW
      WHEN ( NEW.DATE='--'  )
   BEGIN
       dbms_output.Put_line('Trigger is fired');
   END;
/

答案 3 :(得分:0)

CREATE OR REPLACE TRIGGER yourtable_before_insupd
BEFORE INSERT OR UPDATE
   ON yourtable
   FOR EACH ROW
   WHEN (NEW.date = '15-05-2015')

DECLARE
   -- your declarations here - v_date is just an example
   v_date DATE;

BEGIN
   -- your computations here
   -- Find date of the item - just as example
   SELECT date INTO v_date
   FROM dual;


   -- update the date of the item - just as example
   :new.date := sysdate;

END;