- 查询:
- 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;
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;
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;
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