我有一个类型为“DATE”的表格,我希望在atributte达到特定日期时触发一个触发器。
例如:
Table A:
a int primary key;
d Date;
A(1, '15-05-2015');
当这个日期到来时,我想发射一个特定的触发器。
感谢。
答案 0 :(得分:2)
根据Oracle的trigger documentation:
您可以编写触发器,只要执行以下任一操作即可触发 操作发生:
- DML语句(INSERT,UPDATE,DELETE)on 由任何用户发布的特定表格或视图
- DDL 语句(主要是CREATE或ALTER)由特定的语句发出 架构/用户或数据库中的任何架构/用户
- 数据库 还发布了事件,例如登录/注销,错误或启动/关闭 由特定架构/用户或由任何架构/用户 数据库
不幸的是,约会的到来不是其中之一。
但是,您可以创建一个在特定日期运行并执行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;