oracle触发器中定时执行sql

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle触发器中定时执行sql相关的知识,希望对你有一定的参考价值。

参考技术A 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;
参考技术B 定时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;
参考技术C 关于
前面
执行2次的,我还不确定是什么原因
对于
delete
出错的情况,
是取值的方式不正确
请看下面这个
delete
的触发器的例子:
sql>
create
or
replace
trigger
beforedeletetest
2
before
delete
on
test_trigger_table
3
for
each
row
4
begin
5
dbms_output.put_line('before
delete');
6
dbms_output.put_line('old
name
=
'
||
:old.name);
7
dbms_output.put_line('new
name
=
'
||
:new.name);
8
end;
9
/
trigger
created.
sql>
sql>
delete
from
test_trigger_table
where
id
=
1;
before
delete
old
name
=
xyz
new
name
=
1
row
deleted.
你要直接把所有的字段
都写成
:old.......的方式。
也就是
insert
into
standby_emp
values(:old.empno,
:old.其他字段);

oracle数据库定时任务

      应用系统运行中,经常需要定时执行一些任务,例如:定时更新汇总数据,定时更新状态数据等,目前 Treesoft数据库管理系统

增加【定时任务】功能,直接通过页面简单配置,即可按调度规则定时执行SQL任务。执行结果日志直观查看,定时任务维护方便。

以上是关于oracle触发器中定时执行sql的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL ORACLE:删除时触发更新

如何编写触发器来检查工资是不是超出工资的最小或最大范围pl-sql Oracle

有人可以帮我在 PL/SQL Oracle 中实现以下触发器吗?

PL/SQL Oracle 错误处理

SQL Oracle中的触发错误[关闭]

简单的 SQL oracle 触发器