【正确答案】Oracle的JOB分为两类,DBMS_JOB和DBMS_SCHEDULER,二者都可以完成定时任务。(1)DBMS_JOB DBMS_JOB的SUBMIT过程参数如下:

其中,各个参数的说明如下:
1)参数JOB是由SUBMIT()过程返回的BINARY_INEGER。这个值用来唯一标识一个工作,此参数是个变量,在使用前需要被声明,JOB号在DBA_JOBS视图里可以查到。
2)WHAT参数的值是将被JOB执行的PL/SQL代码块,一般是存储过程的名字,记得存储过程后面一定要加上分号。
3)NEXT_DATE参数指示何时运行这个JOB,NEXT_DATE需要修改为数据库第一次执行该JOB的时间,SYSDATE表示立即执行。
4)INTERVAL参数表示这个JOB什么时候将被再次执行,指定JOB的运行周期,INTERVAL为空表示只执行一次。
5)NO_PARSE参数表示此JOB在提交或执行时是否应进行语法分析,TRUE代表此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE代表本PL/SQL代码应立即进行语法分析,在创建JOB时进行检查。默认值为FALSE。
需要注意的是,NEXT_DATE是时间类型,INTERVAL是字符类型,在调用SUBMIT时要指定正确的参数类型。
(2)DBMS_SCHEDULER DBMS_SCHEDULER是Oracle 10g中新增的一个包,与老版本的DBMS_JOB包相比,DBMS_SCHEDULER有很多新特性。例如,DBMS_SCHEDULER可以执行存储过程、匿名块以及OS可执行文件和脚本(包括Linux系统的SHELL脚本),还可以使用DBMS_SCHEDULER更详细地定义JOB的各类属性。DBMS_SCHEDULER具有更详细的作业运行状态以及故障处理和报告功能。
从Oracle 10g开始,Oracle建议使用SCHEDULER替换普通的JOB来管理任务的执行。
下面的例子展示了如何创建一个DBMS_SCHEDULER类型的JOB:
