您的位置:首页 > 其它

Oralce 定时任务 调用存储过程

2017-04-25 16:46 246 查看
查询:  

select job,broken,what,interval,t.* from user_jobs t;   

job job的唯一标识,自动生成的     

broken 是否处于运行状态,N;运行;Y:停止     

what 存储过程名称  

next_date 初次执行时间      

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  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: