一个简单例子:
创建测试表
SQL>
create
table
a(a
date);
表已创建。
创建一个自定义过程
SQL>
create
or
replace
procedure
test
as
2
begin
3
insert
into
a
values(sysdate);
4
end;
5
/
过程已创建。
创建JOB
SQL>
variable
job1
number;
SQL>
SQL>
begin
2
dbms_job.submit(:job1, 'test; ',sysdate, 'sysdate+1/1440 '); --每天1440分钟,即一分钟运行test过程一次
3
end;
4
/
PL/SQL
过程已成功完成。
运行JOB
SQL>
begin
2
dbms_job.run(:job1);
3
end;
4
/
PL/SQL
过程已成功完成。
SQL>
select
to_char(a, 'yyyy/mm/dd
hh24:mi:ss ')
时间
from
a;
时间
-------------------
2001/01/07
23:51:21
2001/01/07
23:52:22
2001/01/07
23:53:24
删除JOB
SQL>
begin
2
dbms_job.remove(:job1);
3
end;
4
/
PL/SQL
过程已成功完成。
select
job,to_char(next_date, 'yyyy-mm-dd
hh24:mi:ss ')
from
all_jobs;
----------job的使用:
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; ',//Procdemo为过程名称
SYSDATE,
'SYSDATE
+
1/720 ');
commit;
end;
-----修改job_queue_processes的值(保证其不为0否则JOB不自动运行)
可通过select
*
from
v$parameter;查看其值;
方法1,startup
pfile= 'C:\oracle\ora90\database\initorcl.ora ';
需要修改initorcl.ora文件的job_queue_processes参数,然后重新启动数据库以后才能生效
方法2,alter
system
set
job_queue_processes=10
不需要重新启动数据库就能生效,系统自动修改init.ora文件