Oracle--01学习-JOB

--创建一张表g_test 

create table G_TEST 

ID     NUMBER(12), 

C_DATE DATE 

--创建一个sequence 

create sequence G_SEQ 

minvalue 1 

maxvalue 999999999999999999999999999 

扫描二维码关注公众号,回复: 1145398 查看本文章

start with 141 

increment by 1 

cache 20; 

---创建一个存储过程 

create or replace procedure prc_g_test is 

begin 

insert into g_test values(g_seq.nextval,sysdate); 

end prc_g_test;

----发布JOB

DECLARE

  jobNo NUMBER;

BEGIN

  DBMS_JOB.SUBMIT(job       => jobNo,

                  what      => 'JOB_PACKAGE.JOB_Name;',  --将被执行的PL/SQL代码块

                  next_date => trunc(sysdate)+ 1/48, --何时将运行这个工作

                  interval  => 'trunc(sysdate +1) + 1/48'); --何时这个工作将被重执行

                  --no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 

  commit;

END;

/

----修改JOB执行时间

DECLARE

  CURSOR C_JOB IS

    SELECT JOB FROM USER_JOBS WHERE UPPER(WHAT) LIKE '%JOB_Name%';

  C_ROW C_JOB%ROWTYPE;

BEGIN

  OPEN C_JOB;

  LOOP

    --提取job号到c_row

    FETCH C_JOB

      INTO C_ROW;

    --判读是否提取到值,没取到值就退出           

    --取到值c_job%notfound 是false            

    --取不到值c_job%notfound 是true

    EXIT WHEN C_JOB%NOTFOUND;

    DBMS_JOB.CHANGE(C_ROW.JOB,

                    NULL,

                    TRUNC(SYSDATE) + 6 / 24,

                    'trunc(SYSDATE+1)+6/24');

  END LOOP;

  --关闭游标      

  CLOSE C_JOB;

  COMMIT;

END;

/

--------------======================

--查看创建的job 

--1、相关视图 dba_jobs 、all_jobs 、user_jobs 、dba_jobs_running 包含正在运行job相关信息

select * from dba_jobs 

--运行JOB 先查询出jobId

 begin 

dbms_job.run(:job); 

  end; 

  / 

----删除JOB 

begin 

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

   end; 

   / 

猜你喜欢

转载自arenzhj.iteye.com/blog/2184126