61581229 发表于 2018-9-13 06:03:54

oracle job 介绍

  有些项目开发中,常常会有一些复杂的业务逻辑。使用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      INvarchar2,
  next_date INdate,
  intervalINvarchar2,
  no_parseINbooean:=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
  2dbms_job.run(:job); ###这里写的job number 通过dba_jobs来查
  3end;
  4/
  #####还有可以通过plSQL进到JOB这个菜单中去点右键运行run,
  ----------------------------------------------------------------------------------
  在plSQL中我的做法是:
  begin
  dbms_job.run(3017);
  end;
  ----------------------------------------------------------------------------------
  7、删除JOB
  SQL> begin
  2dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198
  3end;
  4/

页: [1]
查看完整版本: oracle job 介绍