要定时执行oracle存储过程

更新时间:2023-08-07 10:17:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

主要用作oracle数据库存储过程中定时操作使用方法

实现的功能:

每隔一分钟自动向getSysDate表中插入当前的系统时间。 中心方法: 1)在命令窗口下: exec GETUSERS1('LMM','LMM'); 2)在sql窗口下:

begin

GETUSERS1('LMM','LMM');

end;

一、创建一个测试表 aaa

create table aaa(test date);

//test---字段型:date

create or replace procedure abc as

begin

insert into aaa values (sysdate);

end ;

三、创建JOB,即创建待执行的[定时任务]过程 ppp.sql

在sql窗口下:

variable job1 number;

begin

dbms_job.submit(:job1,'abc;',sysdate,'sysdate+1/1440');

end;

//此时:找到创建个job值。例如:

Select job from job_users;

显示结果:

例如: Jon 值为23

说明:每创建一个成功job后,在job_users表中有一个job值。

四、启动JOB,根据上述查找的job值,即启动并运行定时任务过程

在sql窗口下:

-- 运行一个job

主要用作oracle数据库存储过程中定时操作使用方法

begin

dbms_job.run(23); //写入:job值

end;

五、查看运行效果

select to_char(test,'yyyy/mm/dd hh24:mi:ss') from aaa;

结果如下:

2007/08/03 10:53:11

2007/08/03 11:05:51

六.终止定时器执行。 -- 终止(删除)一个job进程。(重新数据库后,才看得到进程号消失)

begin

dbms_job.remove(23);(即:进程号,要看:select * from user_jobs表中what对应的进程名称相信的的job过程号)

end;

七.重新启动job方法,即重新运行[定时任务]过程即可。

Sql>/

--相关视图

select * from dba_jobs;

select * from all_jobs;

select * from user_jobs;

-- 查看正在运行job状态值(包括:job的进程号)

select * from dba_jobs_running;

Select * from job_users;

参数补充说明:

DBMS_JOB.SUBMIT(:jobno, //job号

'your_procedure;', //要执行的过程

trunc(sysdate)+1/24, //下次执行时间

'trunc(sysdate)+1/24+1' //每次间隔时间

);

删除定时执行:job:dbms_job.remove(jobno);

主要用作oracle数据库存储过程中定时操作使用方法

修改:要执行的操作:job:dbms_job.what(jobno,what);

修改:下次执行时间:dbms_job.next_date(job,next_date);

修改:间隔时间:dbms_job.interval(job,interval);

(暂)停止定时执行:job:dbms.broken(job,broken,nextdate);

启动定时执行:job:dbms_job.run(jobno);

修改:job_queue_processes的值:(保证其不为0否则JOB不自动运行),可通过select * from v$parameter;查看其值,或者直接用show parameter job_queue_processes;查看如下:

NAME TYPE VALUE

--------------- ----------- ------------

job_queue_processes integer 10

方法1.startup pfile='C: oracleora90databaseinitorcl.ora';

这个方法用来修改initorcl.ora文件的

job_queue_processes参数,然后重新启动数据库 。

方法2.alter system set job_queue_processes=10

1、每分钟执行

TRUNC(sysdate,'mi')+1/(24*60)

2、每天定时执行

例如:

每天凌晨0点执行 TRUNC(sysdate+1)

每天凌晨1点执行

TRUNC(sysdate+1)+1/24 每天早上8点30分执行

TRUNC(SYSDATE+1)+(8*60+30)/(24*60)

3、每周定时执行

例如:

每周一凌晨2点执行

TRUNC(next_day(sysdate,1))+2/24

TRUNC(next_day(sysdate,'星期一'))+2/24

主要用作oracle数据库存储过程中定时操作使用方法

每周二中午12点执行

TRUNC(next_day(sysdate,2))+12/24

TRUNC(next_day(sysdate,'星期二'))+12/24 4、每月定时执行

例如: 每月1日凌晨0点执行

TRUNC(LAST_DAY(SYSDATE)+1) 每月1日凌晨1点执行

TRUNC(LAST_DAY(SYSDATE)+1)+1/24

5、每季度定时执行

每季度的第一天凌晨0点执行

TRUNC(ADD_MONTHS(SYSDATE,3),'q')

每季度的第一天凌晨2点执行

TRUNC(ADD_MONTHS(SYSDATE,3),'q')+2/24 每季度的最后一天的晚上11点执行

TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24 6、每半年定时执行

例如:

每年7月1日和1月1日凌晨1点执行

ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24 7、每年定时执行

例如:

每年1月1日凌晨2点执行

ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24

本文来源:https://www.bwwdw.com/article/3m9j.html

Top