现在需要每晚12点向表app_carstatus插入数据。
//下面是一个简单事例:
declare
jobno number;
begin
dbms_job.submit(jobno,'P_SBZS_GENZNJQC;',sysdate,'trunc(sysdate)+1');--每天零晨
commit;
end;
/
DBMS_JOB.SUBMIT(:jobno,//job号
'your_procedure;',//要执行的过程
trunc(sysdate)+1/24,//下次执行时间
'trunc(sysdate)+1/24+1'//每次间隔时间
);
删除job:dbms_job.remove(jobno);
修改要执行的操作:job:dbms_job.what(jobno,what);
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);
例子:
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
'Procdemo;', --存储过程名
SYSDATE, 'SYSDATE + 1/720');---每2分钟执行一次
commit;
end;
/
真正要实现最初的功能,需要如下操作:
//创建存储过程,通过定时任务调用存储过程:
1)创建一个自定义过程
create or replace procedure p_carstatus as
begin
INSERT INTO app_carstatus
SELECT a.infoid,a.infolicense,c.modelname,e.atticode,d.deptname,b.statusid,sysdate FROM app_carinfo a,app_infodynamic b,app_infomodel c,app_cardept d,app_caratti e
WHERE a.infoid=b.infoid(+) and a.modelid=c.modelid(+) and a.deptid=d.deptid(+) and a.attiunitid=e.attiid(+);
COMMIT;
end;
/
过程已创建。
2)创建JOB
variable job1 number;
begin
dbms_job.submit(:job1,'p_carstatus;',trunc(sysdate)-1/1440,'trunc(sysdate)-1/1440+1');
end;
/
PL/SQL 过程已成功完成。
3)运行JOB
begin
dbms_job.run(:job1);
end;
/
PL/SQL 过程已成功完成。
4)删除JOB
begin
dbms_job.remove(:job1);
end;
/
PL/SQL 过程已成功完成。