有些项目开发中,常常会有一些复杂的业务逻辑。使用oracle的存储过程,可以大大减少java程序代码的编写工作量,而且存储过程执行在数据库上,这样可以利用oracle的良好性能支持,极大地提高程序执行效率和稳定性。定时执行存储过程,就要用到job,大部分就是在oracle写一个存储过程,JOB分为普通的JOB和dba_scheduler_jobs(这是oracle 10g 出现的,里面有program ,windows,class, ORACLE建议使用Scheduler替换普通的job,来管理任务的执行),首先来讲一下普通的JOB,

这个例子来自Conqueror

举例来说明创建一个JOB过程:来自

,这里我只简单记述一个创建一个简单的job 
步骤如下:
1、创建一张表g_test 
create table G_TEST 

ID     NUMBER(12), 
C_DATE DATE 

2、创建一个sequence 
create sequence G_SEQ 
minvalue 1 
maxvalue 999999999999999999999999999 
start with 141 
increment by 1 
cache 20; 

3、创建一个存储过程
create or replace procedure prc_g_test is 
begin 
insert into g_test values(g_seq.nextval,sysdate); 
end prc_g_test; 

4、创建job, 
使用Submit()过程,工作被正常地计划好。
这个过程有五个参数:job、what、next_date、interval与no_parse。

PROCEDURE Submit ( job       OUT binary_ineger, 
What      IN  varchar2, 
next_date IN  date, 
interval  IN  varchar2, 
no_parse  IN  booean:=FALSE) 

job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。

在command window窗口中执行下面脚本
variable job1 number; 
begin 
sys.dbms_job.submit(job => :job, 
what => 'prc_g_test;', 
next_date => to_date('22-10-2008 10:06:41', 'dd-mm-yyyy hh24:mi:ss'), 
interval => 'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次
commit; 
end; 


----------------------------------------------------------------------------------
在plSQL 

declare   
job number;      
begin
sys.dbms_job.submit(job,'prc_g_test;',sysdate,'sysdate+1/1440');
end;
----------------------------------------------------------------------------------

5、查看创建的job 
查看相关job信息
1、相关视图
dba_jobs 
all_jobs 
user_jobs 
dba_jobs_running 包含正在运行job相关信息。
如:
select * from dba_jobs 

6、运行JOB
说明:Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数:
SQL> begin 
2  dbms_job.run(:job); ###这里写的job number 通过dba_jobs来查
3  end; 
4  / 
#####还有可以通过plSQL进到JOB这个菜单中去点右键运行run,
----------------------------------------------------------------------------------
在plSQL中我的做法是:
begin
dbms_job.run(3017);
end; 
----------------------------------------------------------------------------------

7、删除JOB
SQL> begin 
2  dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198 
3  end; 
4  /