当前位置:数据库 > Oracle >>

为Oracle建立job的demo

为Oracle建立job的demo
 
1.首先开启OracleJobSchedulerORCL这个服务器,它主要是用于管理oracle的任务的定时器
 
2.然后在pl/sql里执行如下脚本:  (注意是命令窗口,而不是sql窗口)
 
create or replace procedure DeleteDataForJob as 
hisDataTime number;
begin
hisDataTime := 12;      //删除12月之前的数据
delete from hps_passvehicleinfo p where p.pass_time <=add_months(sysdate,-hisDataTime);
commit;
end;
/
variable job number;
begin
dbms_job.submit(:job,'DeleteDataForJob;',trunc(sysdate+1), 'trunc(sysdate+1)+1' );   //每天0点执行一次,间隔一天
commit;
end;
/

 

 
得到一个job id 是一个整数
3.记住job变量的值,将值传入下面的方法
exec dbms_job.run(82);//82为任务计划的id

 

 
 
如果想变为每三个月执行一次:

dbms_job.submit(:job,'DeleteDataForJob;',trunc(sysdate+1), 'trunc(sysdate+1)+90' );   //90天之后执行

如果想每天凌晨三点执行:

dbms_job.submit(:job,'DeleteDataForJob;',trunc(sysdate+1) +3/24, '  (trunc(sysdate+1) +3/24)  +1' );   //90天之后执行

 

 
创建ORACLE JOB
oracle job简介 
主要的使用情景 
定时在后台执行相关操作:如每天晚上0点将一张表的数据保存到另一张表中,2:定时备份数据库等 
 
 
熟化说万事开头难,这里我只简单记述一个创建一个简单的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); 
3  end; 
4  / 


----------------------------------------------------------------------------------
在plSQL中我的做法是:
begin
dbms_job.run(3017);
end; 
----------------------------------------------------------------------------------


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

 

 
说明:在sqlplus命令行直接定义变量要variable!!!!
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,