ORACLE JOB:
JOB的作用:
在项目中,经常会遇到需要定时完成的任务,比如定时更新数据,定时统计数据生成报表等等,这些工作都可以使用Oracle的Job来完成。
提交JOB的方法:
DBMS_JOB.SUBMIT( jobid OUT BINARY_INTEGER, what IN VARCHAR2, NEXT_DATE IN DATE DEFAULT SYSDATE, interval IN VARCHAR2 DEFAULT 'NULL' ) 1.第1个参数jobid:JOB的ID,此处只能放类型为number的变量,这个值用来唯一标识一个工作。当提交任务后,系统会返回一个JOB的ID,会写到此参数变量中。用来唯一地标示一个任务。该参数既可由用户指定也可由系统自动赋予。 2.第2个参数what:是一个是将被执行的PL/SQL代码块,或者是存储过程名,如果是存储过程名,则要在后面添加“;”号。 3.第3个参数next_date:指定何时将运行这个工作。一个时间类型变量而不是一个字符串,所以需要注意不要把它当成字符串,不需要对该参数加引号。用来调度任务队列中该任务下一次运行的时间。 4.第4个参数interval,也就是最后一个参数interval是一个字符串类型,注意添加引号。next_date是建立这个job时希望第一次运行的时间,interval是next_date之后下一次运行的时间,当第一次运行后,next_date的值就是interval的值了,interval的值又代表这次next_date时间之后下一次的运行时间。
例:设置每十秒进行一次myproc存储过程
declare
jobid int;
begin
dbms_job.submit(jobid,'myproc;',sysdate,'sysdate+(10)/(24*60*60)');
dbms_output.put_line(jobid);
end;
这里输出的41是系统给这个job的进程号或者称为任务编号
停止job:
begin dbms_job.remove(41); end; 这里函数dbms_job.remove()括号里面的参数是进程号,就是上一个例子里面说的jobid,这里的jobid一定 要是已经存在的,否则会报错。
修改job:
SQL> exec dbms_job.change(42,'update emp set sal=sal+10 where ename=''SCOTT'';',NULL,NULL); 需要在sql命令窗口中执行,参数和submit的参数一样。
一些描述时间的语言:trunc()是截断,比如trunc('123 456')=123
