Oralce 定时任务 调用存储过程

来源:互联网 发布:笨方法学python在线 编辑:程序博客网 时间:2024/06/06 15:46
  1. 查询:  
  2. select job,broken,what,interval,t.* from user_jobs t;   
  3. job job的唯一标识,自动生成的     
  4. broken 是否处于运行状态,N;运行;Y:停止     
  5. what 存储过程名称  
  6. next_date 初次执行时间      
  7. interval 执行周期

一.复杂点的:

1.创建 定时任务
Declare 
job number;
begin
  sys.dbms_job.submit(job => job,
                      what => 'declare s1 varchar2(200);begin pk_test_2.test_gs(s1); end;', 
                      next_date => TRUNC(sysdate)+1+17/24,--初始执行时间
                      interval => 'TRUNC(sysdate)+1+17/24');--每天下午五点开始执行
  commit;
end;
注: what => 'declare s1 varchar2(200);begin pk_test_2.test_gs(s1); end;',  这个是执行带参数的存储过程的写法。不带参数的直接:what => 'pk_test_2.test_gs;' 就可以了。(封号一定不能掉)
2.执行 定时任务
Declare 
  job_num Integer;
Begin
 -- 查找计划号
 Select t.JOB Into job_num From User_Jobs t ;
 -- 运行制定的执行计划
 dbms_job.run(job_num);
 commit;
end;

注:如果 查找计划号 查出了不止一个计划的时候,执行 dbms_job.run(job_num); 会报错 ,因为 它仅能执行一个计划。
解决办法有:
1.在 dbms_job.run(job_num); 外面套一成循环 ,应该是可以的(没有亲测,只是猜测)。
2.利用sql 语句 Select *  From User_Jobs t  查看对应的JOB 属性值,如果有多个就找到自己计划的 JOB属性对应的值。如图

,然后把 执行语句 dbms_job.run(job_num)  改成 dbms_job.run(24) 就可以了。
3.就是利用PL/SQL 工具 在DBMS_Jobs 中去查看:


二.简单点的

1.创建定时任务
Declare 
 i Integer;
Begin
   dbms_job.submit(i,
                   'declare s1 varchar2(200);begin pk_test_2.test_gs(s1); end;',
                   TRUNC(sysdate)+1+17/24,--初次执行的时间
                   'TRUNC(sysdate)+1+17/24');--每天下午五点执行
end;
commit;

2.执行 定时任务
  和上面的步骤一样。


讲解很详细的连接地址:http://www.cnblogs.com/soundcode/p/5912750.html  
0 0