在写好存储过程后,开始写JOB。因为是用PL/SQL,只需填空。可填完之后老是错误。对照了一个正确的JOB,发现是在写WHAT的时候最后少了一个分号;,改了过来。
保存后,RUN老是失败。搜索了一下,知道了执行失败会有日志文件,于是找到了ORACLE安装目录下的admin/.../bdump/alert.log。发现是“未找到数据”,猜测是表里没数据。往表里添加数据后,执行RUN终于成功了。明天再观察它会不会定时执行。
创建测试表
SQL> create table a(a date);
表已创建。
创建一个自定义过程
SQL> create or replace procedure test as
2 begin
3 insert into a values(sysdate);
4 end;
5 /
过程已创建。
创建JOB
SQL> variable job1 number;
SQL>
SQL> begin
2 dbms_job.submit(:job1, 'test; ',sysdate, 'sysdate+1/1440 '); --每天1440分钟,即一分钟运行test过程一次
3 end;
4 /
PL/SQL 过程已成功完成。
运行JOB
SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /
PL/SQL 过程已成功完成。
SQL> select to_char(a, 'yyyy/mm/dd hh24:mi:ss ') 时间 from a;
删除JOB
SQL> begin
2 dbms_job.remove(:job1);
3 end;
4 /
PL/SQL 过程已成功完成。
补充说明:DBMS_JOB.SUBMIT用法
DBMS_JOB.SUBMIT(
JOB => :JOB, /*自动生成JOB_ID*/
WHAT => 'CREATE_TASK_BY_PLAN;', /*需要执行的过程或SQL语句*/
NEXT_DATE => TRUNC(SYSDATE+1)+6/24, /*初次执行时间*/
INTERVAL => 'TRUNC(SYSDATE+1)+6/24'); /*执行周期*/
启示我看日志文件的BLOG:http://yuwenhu.blog.51cto.com/672091/161393