--oracle job 定时执行 存储过程
--建一张测试表
create table Person(
name varchar2(50),
sex varchar2(10)
);
/
--创建测试的存储过程
create or replace job_procedure(pname in varchar2,psex in varchar2) as
begin
insert into Person values(pname,psex);
end job_procedure;
/
--创建一个job任务
variable jobid number;
begin
dbms_job.submit(:jobid,'job_procedure',sysdate,'sysdate+1/1440');--每分钟执行一次 24 * 60 = 1440;
end;
/
--运行job
begin
dbms_job.run(:jobid);
end;
/
--删除job
begin
dbms_job.remove(:jobid);
end;
/
---------------------------------------------------------------------------
--另一种方法 调度
--建一张测试表
create table Person(
name varchar2(50),
sex varchar2(10)
);
/
--创建测试的存储过程
create or replace job_procedure(pname in varchar2,psex in varchar2) as
begin
insert into Person values(pname,psex);
submit();--提交
end job_procedure;
/
--创建一个job任务
begin
dbms_scheduler.create_job(
job_name => 'jobname',
job_type => 'STORED_PROCEDURE',
job_action => 'job_procedure',
start_date => sysdate,
repeat_interval => 'FREQ=DAILY;INTERVAL=2',
enabled => TRUE,
comments => 'my procedure job !'
);
end;
/
--执行job
begin
dbms_scheduler.run_job(job_name=>'jobname');
end;
/
--删除job
begin
dbms_scheduler.dorp_job(job_name=>'jobname');
end;
/
/*
参数说明:
job_name: 顾名思义,每个job都必须有一个的名称
schedule_name: 如果定义了计划,在这里指定计划的名称
job_type: 目前支持三种类型:
PL/SQL块: PLSQL_BLOCK,
存储过程: STORED_PROCEDURE
外部程序: EXECUTABLE (外部程序可以是一个shell脚本,也可以是操作系统级别的指令).
job_action: 根据job_type的不同,job_action有不同的含义.
如果job_type指定的是存储过程,就需要指定存储过程的名字;
如果job_type指定的是PL/SQL块,就需要输入完整的PL/SQL代码;
如果job_type指定的外部程序,就需要输入script的名称或者操作系统的指令名
enabled: 上面已经说过了,指定job创建完毕是否自动激活
comments: 对于job的简单说明
*/
/*
----------repeat_interval参数------------
repeat_interval => 'FREQ=HOURLY; INTERVAL=2' 每隔2小时运行一次job
repeat_interval => 'FREQ=DAILY' 每天运行一次job
repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,WED,FRI" 每周的1,3,5运行job
repeat_interval => 'FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=30' 每年的3,6,9,12月的30号运行job
*/
--如有错误,欢迎指出!!!