oracle触发器中定时执行sql

需求:需要在一个表插入数据后的十分钟或者二十分钟修改这张表的某个字段。请附上sql语句。... 需求:需要在一个表插入数据后的十分钟或者二十分钟修改这张表的某个字段。请附上sql语句。 展开
 我来答
百度网友c796a75
2016-09-20 · TA获得超过270个赞
知道答主
回答量:53
采纳率:100%
帮助的人:38.1万
展开全部
  1. 关于Oracle 触发器中定时执行SQL 的问题, Oracle触 发器只是在表中数据被更新 如Insert,update,delete 等情况下才会触发,不能做到定时,只是能是有变化时才会执行!

  2. 要做到定时执行可使用Job 来完成

  3. 数据已经完成插入,建议插入数据时,直接使用触发器

  4. 例2:限制对Departments表修改(包括INSERT,DELETE,UPDATE)的时间范围,即不允许在非工作时间修改departments表。
     
    CREATE OR REPLACE TRIGGER tr_dept_time
    BEFORE INSERT OR DELETE OR UPDATE 
    ON departments
    BEGIN
     IF (TO_CHAR(sysdate,'DAY') IN ('星期六', '星期日')) OR (TO_CHAR(sysdate, 'HH24:MI') NOT BETWEEN '08:30' AND '18:00') THEN
         RAISE_APPLICATION_ERROR(-20001, '不是上班时间,不能修改departments表');
     END IF;
    END;
徘徊行忍
推荐于2018-03-11 · TA获得超过1053个赞
知道小有建树答主
回答量:990
采纳率:57%
帮助的人:511万
展开全部
oracle本身并没有直接的这个功能,可以变通的做法有2个,1)在插入时同步写一个标志表,dbms_job以非常快的速度检查标志表,发现有插入则执行procedure;2)新建插入后触发的Trigger,然后dbms_jobs检查。
你先说我这2个方案是否可行,考虑下1是服务器负载是否能支持高频率的触发dbms_job,然后延时是否必须非常精确,dbms_job能不能满足精度需求。如果都能满足,我再做sql给你.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
紫银桐枫
2016-12-16 · TA获得超过346个赞
知道小有建树答主
回答量:566
采纳率:60%
帮助的人:113万
展开全部
定时plsql代码如下

此代码已计算定时(目前定时20分)
DECLARE
l_datediff NUMBER; --时间差
l_bein DATE; --程序执行时间
l_time NUMBER := 20; --定时
BEGIN
dbms_output.put_line(to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'));
l_bein := SYSDATE;
LOOP
SELECT SYSDATE - l_bein
INTO l_datediff
FROM dual;

EXIT WHEN l_datediff >= l_time/(24*60); --计算时分秒
END LOOP;
END;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yu48250302
2016-07-22 · TA获得超过129个赞
知道小有建树答主
回答量:215
采纳率:100%
帮助的人:76.3万
展开全部
为什么要触发器执行,何不建job定时执行存储过程
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ca97ae0
2016-05-08 · TA获得超过201个赞
知道小有建树答主
回答量:483
采纳率:51%
帮助的人:95.4万
展开全部
定时器,貌似不用了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式