您的位置:首页 > 数据库 > Oracle

创建ORACLE JOB

2013-10-22 16:32 399 查看

创建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!!!!
 

在plsql中执行如下脚本可以创建一个在每天晚上23点执行的job

begin
sys.dbms_job.submit(job => :job,   -- job编号
what => 'dbms_output.pub_line(''asdf'');',  -- 执行脚本
next_date => to_date('17-01-2011 16:17:31', 'dd-mm-yyyy hh24:mi:ss'),   -- 下次执行时间
interval => 'trunc(sysdate)+23/24');  -- 执行时间间隔
commit;
end;
/

其中interval参数的几个可能的示范值如下:
A,每5分钟执行一次
interval => 'trunc(sysdate,'mi')+5/24/60'
B,每小时执行一次,整点执行
interval => 'trunc(sysdate,'HH')+1/24'
C,一个小时后执行
interval => 'sysdate+1/24'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle job