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; 

  / 

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  / 

7、删除JOB 

SQL> begin 

  2  dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198 

  3  end; 

  4  / 

说明:在sqlplus命令行直接定义变量要variable!!!! 

 描述 INTERVAL参数值

每天午夜12点 'TRUNC(SYSDATE + 1)'

每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'

每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'

每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'

每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ),

'Q' ) -1/24'

每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE,

''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)

'

--------------------------

1:每分钟执行

Interval => TRUNC(sysdate,'mi') + 1/ (24*60)

或 

Interval => sysdate+1/1440

2:每天定时执行

例如:每天的凌晨1点执行

Interval => TRUNC(sysdate) + 1 +1/ (24)

3:每周定时执行

例如:每周一凌晨1点执行

Interval => TRUNC(next_day(sysdate,'星期一'))+1/24

4:每月定时执行

例如:每月1日凌晨1点执行

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24

5:每季度定时执行

例如每季度的第一天凌晨1点执行

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24

6:每半年定时执行

例如:每年7月1日和1月1日凌晨1点

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24

7:每年定时执行

例如:每年1月1日凌晨1点执行

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24 

原文地址:https://www.cnblogs.com/kunpengit/p/2790970.html