一个简单例子:
创建测试表
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文件