job的写法示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sys.d bms_j ob.su bmit(job => job_id,
wh at => '要调用的proc',
next_date =>下次运行时间,
inter val => 间隔时间);
or acle的job中怎样写每月的5日执行一个作业的代码?
不可以直接用i nterv al来限制Job的执行特定的时间的。
in terva l只是执行间隔时间。
应该再job的执行过程中用个if语句检查当前时间是否是5日。
tr unc(a dd_mo nths(sysda te,1),'mm')+4
我想写一个JOB,从oracl e数据库中每天凌晨执行一个sq l提取数据,但是以前从来没有接触过JOB,请问该怎么样写呢?
谢谢大家了,我只是想有没有一个格式之类的东西可以看看?
begin
s ys.db ms_jo b.sub mit(j ob => :job,
what=> 'P UB_RE LATE_DDEVI CE_DN ET;',
n ext_d ate => to_date('19-10-2007 00:00:00', 'd d-mm-yyyyhh24:mi:ss'), int erval => 'TRUNC(SYSD ATE+1)');
co mmit;
end;
/
创建一个自定义过程
SQL> cre ate o r rep laceproce dureMYPRO C as
2 begi n
3 in sertintoTESTvalue s(sys date);
4 en d;
5 /
过程已创建。
创建JO B
SQ L> va riabl e job1 num ber;
SQL>
SQL> beg in
2 d bms_j ob.su bmit(:job1,'MYP ROC;',sysd ate,'TRUNC(SYSD ATE + 1) +
(1*60)/(24*60)');--每天凌晨一点执行;
3 en d;
4 /
PL/SQL 过程已成功完成。
运行JOB
SQL> beg in
2 d bms_j ob.ru n(:jo b1);
3 end;
4 /
PL/SQ L 过程已成功完成。
SQL> sel ect t o_cha r(a,'yyyy/mm/dd hh24:mi:s s') 时间 fro m TES T;
时间
-------------------
2001/01/0723:51:21
2001/01/07 23:52:22
2001/01/07 23:53:24
删除J OB
S QL> b egin
2 dbms_job.remov e(:jo b1);
3 end;
4 /
PL/SQ L 过程已成功完成。
*******************************************************************
一个简单例子:
创建测试表
SQL> crea te ta ble a(a da te);
表已创建。
创建一个自定义过程
SQ L> cr eateor re place proc edure test as
2 b egin
3 inser t int o a v alues(sysd ate);
4 end;
5 /
过程已创建。
创建J OB
SQ L> va riabl e job1 num ber;
SQL>
SQL> begi n
2 dbm s_job.subm it(:j ob1,'test;',sys date,'sysd ate+1/1440');--每天1440分钟,即一分钟运行tes t过程一次
3 end;
4 /
P L/SQL过程已成功完成。
运行JO B
SQL> beg in
2 db ms_jo b.run(:job1);
3 e nd;
4 /
PL/SQL 过程已成功完成。
S QL> s elect to_c har(a,'yyy y/mm/dd hh24:mi:ss')时间f rom a;
时间
-------------------
2001/01/07 23:51:21
2001/01/07 23:52:22
2001/01/07 23:53:24
删除J OB
SQ L> be gin
2 d bms_j ob.re move(:job1);
3 en d;
4 /
PL/S QL 过程已成功完成。
1、确保Oracl e的工作模式允许启动队列管理器(SNP进程)
SVRMG RL> Alte r S ystem En able Res trict ed Sessi on;
或SQL> Alt er Syste m D isena ble Rest ricte d S essio n;
2、确保O racle已配置任务队列管理器的启动参数
in itSID.ora中:
j ob_qu eue_p roces s=n(0);(0-36)个进程
j ob_qu eue_i nterv al=N(60);(1-3600)秒唤醒
3、将任务加入数据库的任务队列中
DBM S_JOB.Subm it (
j ob out bina ry_in teger, (任务号)
wha t i n v archa r2, (执行任务的名称及入参)
next_date in da te, (任务执行的时间)
in terva l i n v archa r2, (任务执行的间隔。
null:执行一次;sysda te+m:周期性,每隔m天执行)
n o_par se in boole an
)
同时
g rant exe cute on dbm s_job to ...;
4、将要执行的任务,为存储过程等PL/S QL程序段
SQ L> varia ble n numbe r;
SQL> beg in
2 d bms_j ob.su bmit(n, 'my_j ob', sys date, 's ysdat e + 1/360');
3 co mmit;
4 end
5 /
SQL> pr int :n;
5、查看Job
Tab le :user_jobs、dba_jobs
Col umn:j ob (任务号)
ne xt_da te (下次执行日期)
next_sec (下次执行时间)
fa ilure s (失败次数,失败16次则自动终止)
b roken (终止标志,Y/N)
Top
3 楼fr eddy2003()回复于2004-10-1808:24:08 得分 0 D BMS_J ob包的用法
包含以下子过程:
Brok en()过程。
ch ange()过程。
Inter val()过程。
I submi t()过程。
Nex t_Dat e()过程。
Rem ove()过程。
R un()过程。
Su bmit()过程。
User_Expor t()过程。
Wha t()过程。
1、
Broke n()过程更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。
这个过程有三个参数:job、br oken与next_date。
PROC EDURE Br oken (jo b IN bina ry_in teger,
Br oken IN bo olean,
ne xt_da te IN date :=S YSDAT E)
jo b参数是工作号,它在问题中唯一标识工作。
brok en参数指示此工作是否将标记为破——TR UE说明此工作将标记为破,
而F LASE说明此工作将标记为未破。
nex t_dat e参数指示在什么时候此工作将再次运行。
此参数缺省值为当前日期和时间。
2、
Ch ange()过程用来改变指定工作的设置。
这个过程有四个参数:job、what、ne xt_da te与in terva l。
PR OCEDU RE Chang e (job IN binar y_int eger,
Wha t IN varc har2,
nex t_dat e IN date,
in terva l IN va rchar2)
此j ob参数是一个整数值,它唯一标识此工作。
What参数是由此工作运行的一块PL/SQL代码块。
ne xt_da te参数指示何时此工作将被执行。
int erval参数指示一个工作重执行的频度。
3、
I nterv al()过程用来显式地设置重执行一个工作之间的时间间隔数。
这个过程有两个参数:job与i nterv al。
P ROCED URE Inte rval (jo b I N b inary_inte ger,
Inter val IN varc har2)
job参数标识一个特定的工作。
inte rval参数指示一个工作重执行的频度。
4、
IS ubmit()过程用来用特定的工作号提交一个工作。
这个过程有五个参数:job、what、next_date、inter val与n o_par se。
P ROCED URE ISub mit (jobIN binar y_ine ger,
Wh at IN varch ar2,
ne xt_da te IN date,
i nterv al IN var char2,
no_pa rse IN bo oean:=FALS E)
这个过程与Su bmit()过程的唯一区别在于此job参数作为IN型参数传递且包括一个
由开发者提供的工作号。
如果提供的工作号已被使用,将产生一个错误。
5、
Nex t_Dat e()过程用来显式地设定一个工作的执行时间。
这个过程接收两个参数:jo b与nex t_dat e。
PR OCEDU RE Next_Date(job IN bin ary_i neger,
nex t_dat e IN da te)
j ob标识一个已存在的工作。
ne xt_da te参数指示了此工作应被执行的日期与时间。
6、
Remov e()过程来删除一个已计划运行的工作。
这个过程接收一个参数:
PROC EDURE Re move(job IN bi nary_inege r);
j ob参数唯一地标识一个工作。
这个参数的值是由为此工作调用Su bmit()过程返回的job参数的值。
已正在运行的工作不能由调用过程序删除。
7、
Ru n()过程用来立即执行一个指定的工作。
这个过程只接收一个参数:
PRO CEDUR E R un(jo b I N b inary_ineg er)
job参数标识将被立即执行的工作。
8、
使用S ubmit()过程,工作被正常地计划好。
这个过程有五个参数:job、what、next_date、inter val与n o_par se。
P ROCED URE Subm it ( j ob OUT bi nary_inege r,
What INvarch ar2,
ne xt_da te IN dat e,
inte rvalI N varc har2,
n o_par se INb ooean:=FAL SE)
j ob参数是由Subm it()过程返回的b inary_ineg er。
这个值用来唯一标识一个工作。
wh at参数是将被执行的PL/SQ L代码块。
next_date参数指识何时将运行这个工作。
inter val参数何时这个工作将被重执行。
no_pars e参数指示此工作在提交时或执行时是否应进行语法分析——TRU E
指示此PL/SQ L代码在它第一次执行时应进行语法分析,
而FALS E指示本P L/SQL代码应立即进行语法分析。
9、
User_Expo rt()过程返回一个命令,此命令用来安排一个存在的工作以便此工作能重新提交。
此程序有两个参数:jo b与my_call。
PROC EDURE Us er_Ex port(job IN binar y_ine ger,
m y_cal l IN OUT varc har2)
job参数标识一个安排了的工作。
my_call参数包含在它的当前状态重新提交此工作所需要
的正文。
10、
What()过程应许在工作执行时重新设置此正在运行的命令。
这个过程接收两个参数:job与w hat。
PROCE DURE Wha t (job IN bi nary_inege r,
What IN OUT va rchar2)
jo b参数标识一个存在的工作。
wh at参数指示将被执行的新的PL/SQL代码。
6这2个JOB参数是什么意思??
SQL> sho w p arame ter job
NAME TYPEV ALUE
------------------------------------ ------- -------------
jo b_que ue_in terva l integ er 10
jo b_que ue_pr ocess es i ntege r 4
job_queue_inte rval是唤醒间隔,每次唤醒系统都会检查当前哪些JOB需要执
行。
太频繁了不好,会占有太多系统资源,以前设置的经验是60s,而JOB一般都是10分钟一次刷新。
job_queu e_pro cesse s 处理进程数,就是有几个进程来处理JOB刷新了,不必很大,3~5就差不多了。
job_queu e_int erval 9i成了隐参_job_queue_inte rval默认为 5
DBMS_JOB.S UBMIT(:job no,//job号
'yo ur_pr ocedu re;',//要执行的过程
trun c(sys date)+1/24,//下次执行时间
'tr unc(s ysdat e)+1/24+1'//每次间隔时间
);
删除j ob:db ms_jo b.rem ove(j obno);
修改要执行的操作:job:dbms_job.w hat(j obno,what);
修改下次执行时间:dbms_job.next_date(job,n ext_d ate);
修改间隔时间:db ms_jo b.int erval(job,inter val);
停止jo b:dbm s.bro ken(j ob,br oken,nextd ate);
启动jo b:dbm s_job.run(jobno);
db ms_jo b.sub mit(j obno,'pro;',to_date('2003-9-8 00:00:00','yy yy-mm-dd
hh24:mi:s s'),'trunc(sysd ate,''dd'')+1/(24*60)');
dbms_job.s ubmit(jobn o,'te stjob;',tr unc(s ysdat e),'t runc(sysda te,''mi'')+1/(24*60)');
d bms_j ob.su bmit(jobno,'ins ert into t_dtime
va lues(sysda te);',trun c(sys date),'tru nc(sy sdate,
‘’m i'')+1/(24*60)');
db ms_jo b.sub mit(n,'sho w;',t runc(sysda te)+(22/24),'tr unc(s ysdat e)+1+(22/24)');
dbms_job.submi t(:jo b1,'t est;',trun c(sys date)+1/1440, 'tru nc(sy sdate)+1+1/1440'); ----每天深夜0:01分执行
D BMS_J OB.SU BMIT(:jobn o,
'P rocde mo;',
SY SDATE, '(last_day(sysda te))+ 1 ')
每月初第一天执行
对于ORACL E中的tr unc()函数也许还有人对它不是很了解,这篇文章将对它进行讲解,好好看吧。
TRUNC
()函數分兩種
1.
TR UNC
(for date s)
TRUN C
函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC
(d ate[,fmt])
其中:
date一个日期值
fm t 日期格式,该日期将由指定的元素格式所截去。
忽略它则由最近的日期截去
下面是该函数的使用情况:
TRU NC
(TO_D ATE(’24-No v-1999 08:00 pm’,’dd-mon-yyyyhh:mi am’))
=’24-Nov-1999 12:00:00 am’
TRUNC
(T O_DAT E(’24-Nov-199908:37 pm’,’dd-m on-yy yy hh:mi a m’,’h h’))=’24-Nov-1999 08:00:00am’
2.
TRUN C
(for n umber)
TRUNC
函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
其具体的语法格式如下
TRUNC
(n umber[,dec imals])
其中:
num ber 待做截取处理的数值
deci mals指明需保留小数点后面的位数。
可选项,忽略它则截去所有的小数部分
下面是该函数的使用情况:
TRUNC
(89.985,2)=89.98
TR UNC
(89.985)=89
TRUN C
(89.985,-1)=80
注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。
。