oracle中trunc函数用法oracle中dbms_scheduler简单⽤法job是什么呢? 简单的说就是计划(schedule)加上任务说明. 另外还有⼀些必须的参数.
这⾥提到的"任务"可以是数据库内部的存储过程,匿名的PL/SQL块,也可以是操作系统级别的脚本.
可以有两种⽅式来定义"计划":
1) 使⽤DBMS_SCHDULER.CREATE_SCHEDULE 定义⼀个计划;
2) 调⽤DBMS_SCHDULER.CREATE_JOBE过程直接指定 (下⾯会详细说明)
在创建⼀个计划时,你⾄少需要指定下⾯的属性,它们是job运⾏所必须的:
开始时间 (start_time);
重复频率 (repeat_interval);
结束时间 (end_time)
另外,对于⼀个job⽽⾔,还有很多的附加参数:
job_class
job_priority
auto_drop
restartable
max_runs
max_failures
schedule_limit
logging_level
---创建表
CREATE TABLE "SHIHUA"."A_TESTDATE"
( "BTIME" DATE,
"ETIME" DATE
)
---创建存储过程
CREATE OR REPLACE PROCEDURE "SHIHUA"."TEST_DATE1" is
tempSql varchar2(4000);--临时语句
begin
tempSql := 'insert into a_testdate(btime,etime) values(sysdate,sysdate)';
execute immediate tempSql;
COMMIT;
--insert into a_testdate(btime,etime) values(sysdate,sysdate );
end test_date1;
/
--创建job
BEGIN
DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'J_P1', -- JOB名字
JOB_TYPE => 'STORED_PROCEDURE', -- 类型,这
JOB_ACTION => 'P1', -- 存储过程
START_DATE => to_date('2017-01-01','yyyy-mm-dd'),
REPEAT_INTERVAL => 'FREQ=DAILY;BYHOUR=2', -- 时间间隔 每天2点
ENABLED => TRUE,
COMMENTS => '每天2点计算XXX数据JOB'); -- 注释内容 END;
/
---启动job
able(NAME => 'job_test_insert');
-
- 运⾏Job
dbms_scheduler.run_job(job_name => 'job_test_insert',
use_current_session => FALSE);
job_name: 顾名思义,每个job都必须有⼀个的名称
schedule_name: 如果定义了计划,在这⾥指定计划的名称
job_type: ⽬前⽀持三种类型:
PL/SQL块: PLSQL_BLOCK,
存储过程: STORED_PROCEDURE
外部程序: EXECUTABLE (外部程序可以是⼀个shell脚本,也可以是操作系统级别的指令).
job_action: 根据job_type的不同,job_action有不同的含义.
如果job_type指定的是存储过程,就需要指定存储过程的名字;
如果job_type指定的是PL/SQL块,就需要输⼊完整的PL/SQL代码;
如果job_type指定的外部程序,就需要输⼊script的名称或者操作系统的指令名
---停⽌job
BEGIN
dbms_scheduler.disable(NAME => 'job_test_insert');
END;
---查询语句
select * from A_TESTDATE;
-- 删除job
BEGIN
dbms_scheduler.drop_job(JOB_NAME => 'job_test_insert');
END;
如何查询job:
有两种⽅法:
1) 查询(DBA|ALL|USER)_SCHEDULER_JOBS 视图
(提⽰: 根据⽤户权限的不同,选择性的查询 DBA|ALL|USER视图)
2) 调⽤DBMS_SCHEDULER包中的GET_ATTRIBUTE 过程
执⾏频率:
10G ⽀持两种模式的repeat_interval,⼀种是PL/SQL表达式,这也是dbms_job包
中所使⽤的,例如SYSDATE+1, SYSDATE + 30/24*60; 另⼀种就是⽇历表达式。
例如MON表⽰星期⼀,SUN表⽰星期天,DAY表⽰每天,WEEK表⽰每周等等. 下⾯来
看⼏个使⽤⽇历表达式的例⼦:
每隔5s:REPEAT_INTERVAL=SECONDLY;INTERVAL=5
每⼩时:REPEAT_INTERVAL=HOURLY;INTERVAL=1
每天2点:REPEAT_INTERVAL=DAILY;BYHOUR=2
每天运⾏⼀次job :repeat_interval => 'FREQ=DAILY'
每周的1,3,5运⾏job:repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,WED,FRI"
每年的3,6,9,12⽉的30号运⾏job:repeat_interval => 'FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=30'下⾯再说说使⽤⽇历表达式的规则:
⽇历表达式基本分为三部分: 第⼀部分是频率,也就是"FREQ"这个关键字,
它是必须指定的; 第⼆部分是时间间隔,也就是"INTERVAL"这个关键字,
取值范围是1-999. 它是可选的参数; 最后⼀部分是附加的参数,可⽤于
精确地指定⽇期和时间,它也是可选的参数,例如下⾯这些值都是合法的:
BYMONTH,BYWEEKNO,BYYEARDAY,BYMONTHDAY,BYDAY
BYHOUR,BYMINUTE,BYSECOND
还有:
repeat_interval :
1/24 :⼀⼩时
1/1440 : ⼀分钟
1/(3600*24) : ⼀秒钟
sysdate+1 : 每天运⾏⼀次
sysdate+1/24 : 每⼀⼩时运⾏⼀次
sysdate+1/1440 : 每⼀分钟运⾏⼀次
sysdate+1/(3600*24) : 每⼀秒钟运⾏⼀次
sysdate+7 : 每星期运⾏⼀次
trunc(sysdate+1) : 每天午夜12点
trunc(sysdate+1)+(8*60+30)/(24*60) : 每天早上8:30
trunc(last_date(sysdate)+1) : 每个⽉第1天的午夜12点
next_day(trunc(sysdate),"tuesday"+12/24) : 每星期⼆中午12点
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论