您正在使用 IPV4 [3.142.98.108] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
悟空收录网       [公益]保护绿色环境,构建和谐社会      

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折      
[公益] 地球是我家,绿化靠大家      
2024年 劳动节 011
2024年 端午节 051
2025年 元 旦 256
2025年 春 节 284
综合数码金融娱乐服务报刊政府机构 推荐 排名 今日 申请 友情  
您现在的位置:首页 >> 数据库 >> 内容
本类新增
本类热门
Oracle中的定时任务实例教程
内容摘要: 一、Oracle中的定时任务的实例1.1、创建一个测试表,只有一个DATE类型字段CREATETABLETEST_A(TEST_ADD_DATADATE);1.2、创建一个自定义存储过程CREATEORREPLACEPROCEDURETEST_PROASBEGININSERTINTOTEST_AVALUES(SYSDATE);END;1.3、创建定时任务JO......
一、Oracle中的定时任务的实例

1.1、创建一个测试表,只有一个DATE类型字段

CREATETABLETEST_A(TEST_ADD_DATADATE);

1.2、创建一个自定义存储过程

CREATEORREPLACEPROCEDURETEST_PROAS

BEGIN

INSERTINTOTEST_AVALUES(SYSDATE);

END;

1.3、创建定时任务JOB

DECLARE

jobnoNUMBER;

BEGIN

dbms_job.submit(

jobno,--定时器ID,系统自动获得

'TEST_PRO;',--what执行的过程名

SYSDATE,--next_date,定时器开始执行的时间,这样写表示立即执行

'TRUNC(sysdate,''mi'')+1/(24*60)'--interval,设置定时器执行的频率,这样写每隔1分钟执行一次

);

COMMIT;

END;

说明:

1、declare后面的jobno是一个数字类型,主要的用途是给定时器保存id,下面的job引用此jobno。

2、job:输出变量,是此任务在任务队列中的编号;

3、what:执行的任务的名称及其输入参数;

4、next_date:任务执行的时间;

5、interval:任务执行的时间间隔。

1.4、运行JOB(1.3执行成功后,job就已经开始执行了)

select*fromTEST_A;

1.5、关于JOB的查询操作

--查看调度任务

select*fromuser_jobs;

--查看正在执行的调度任务

select*fromdba_jobs_running;

--查看执行完的调度任务

select*fromdba_jobs;

job的id,此id不是随便填写的,而是执行select*fromuser_jobs;查询到定时任务名称对应的id。

手动执行定时任务(下面的参数25需要根据本地查询的参数来确定)

BEGIN

DBMS_JOB.RUN(25);

COMMIT;

END;

停止已启动的定时任务

BEGIN

DBMS_JOB.BROKEN(25,TRUE,SYSDATE);

COMMIT;

END;

删除指定job

BEGIN

DBMS_JOB.REMOVE(25);

commit;

END;

1.6、常见的Interval设置

描述INTERVAL参数值

每天午夜12点TRUNC(SYSDATE+1)

每天早上8点30分TRUNC(SYSDATE+1)+(8*60+30)/(24*60)

每星期二中午12点NEXT_DAY(TRUNC(SYSDATE),''TUESDAY'')+12/24

每个月第一天的午夜12点TRUNC(LAST_DAY(SYSDATE)+1)

每个季度最后一天的晚上11点TRUNC(ADD_MONTHS(SYSDATE+2/24,3),'Q')-1/24

每星期六和日早上6点10分TRUNC(LEAST(NEXT_DAY(SYSDATE,''SATURDAY"),NEXT_DAY(SYSDATE,"SUNDAY")))+(6×60+10)/(24×60)

每秒钟执行次

Interval=>sysdate+1/(24*60*60)

如果改成sysdate+10/(24*60*60)就是10秒钟执行次

每分钟执行

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

如果改成TRUNC(sysdate,'mi')+10/(24*60)就是每10分钟执行次

每天定时执行

例如:每天的凌晨1点执行

Interval=>TRUNC(sysdate)+1+1/(24)

每周定时执行

例如:每周一凌晨1点执行

Interval=>TRUNC(next_day(sysdate,'星期一'))+1/24

每月定时执行

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

Interval=>TRUNC(LAST_DAY(SYSDATE))+1+1/24

每季度定时执行

例如每季度的第一天凌晨1点执行

Interval=>TRUNC(ADD_MONTHS(SYSDATE,3),'Q')+1/24

每半年定时执行

例如:每年7月1日和1月1日凌晨1点

Interval=>ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24

每年定时执行

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

Interval=>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

1.7、编写存储过程的格式样例

--oracle存储过程格式

CREATEORREPLACEPROCEDURETEST_PRO_NAMEAS

declarecountNumINT:=0;

begin

selectcount(*)intoSM_USERfromtest2;

if(countNum=0)then

--deletefromTable

--INSERTINTOtable(col1,col2,col3)

--SELECTcol1,col2,col3FROMtableWHEREcondition;

--业务完成写日志

else

--没有数据写日志

endif;

commit;

ExceptionWhenOthersThen

rollback;

ENDTEST_PRO_NAME

补充:Oracle手动执行定时任务

Oracle数据库中的定时任务可以使用DBMS_SCHEDULER包来手动执行。下面是一个简单的步骤:

1.使用SYS或具有管理员权限的用户登录到Oracle数据库中。

2.打开SQLPlus或SQLDeveloper等工具。

3.连接到数据库,并输入以下命令以创建一个简单的定时任务:

BEGIN

DBMS_SCHEDULER.CREATE_JOB(

job_name=>'my_job',

job_type=>'PLSQL_BLOCK',

job_action=>'BEGINmy_procedure();END;',

start_date=>SYSTIMESTAMP,

repeat_interval=>'FREQ=HOURLY;INTERVAL=1',

enabled=>TRUE,

comments=>'Mynewjob'

);

END;

/

在上面的命令中,我们创建了一个名为"my_job"的定时任务,它每小时重复执行一次,并在启用时运行PL/SQL块。

4.执行以下命令来手动运行定时任务:

BEGIN

DBMS_SCHEDULER.RUN_JOB('my_job');

END;

/

在上面的命令中,我们手动运行名为"my_job"的定时任务。

请注意,如果你要手动执行的定时任务有任何依赖项,如数据库对象或作业链,则必须在手动运行之前确保这些依赖项已经准备就绪。

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:MySQL导入导出.sql文件及常用命令小结

 

下一篇:oracle 删除重复数据

发布日期:2023/4/21
手机扫二维码直达本页
发布时间:12:39:32
点  击:7
录  入:齐天大圣
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,奇安信网站卫士提供加速防护
运行时间载入中.....