oracle作业调用存储过程(第一次使用,弱~~)

来源:互联网 发布:mac系统需要清理吗 编辑:程序博客网 时间:2024/06/07 08:38

      近段时间在写一个每日显示一句英语的小程序,表建起来,添加数据也没问题。可是怎么控制每天显示一句,第二天显示另外一句,显示完了还重新从头开始显示。遂决定建立一个作业,每天12点后执行一次,将显示标示移动到下一条上去。

存储过程如下:

create or replace PROCEDURE PRO_ENGLISH AS
v_a NUMBER(12) := 0;
v_max NUMBER(12):=0;
v_min NUMBER(12):=0;
v_temp NUMBER(12):=0;
cursor cmp_cur is SELECT eid from english_day order by eid;
BEGIN
  select eid into v_a from english_day where display=1;
  select max(eid) into v_max from english_day;
  select min(eid) into v_min from english_day;
  if v_a>= v_max then
     UPDATE english_day set display=1 where eid= v_min;
     update english_day set display=0 where eid= v_a;
  else
     open cmp_cur;
     loop
     fetch cmp_cur into v_temp;
     exit when v_temp> v_a;
     END LOOP;
     UPDATE english_day set display=1 where eid= v_temp;
     update english_day set display=0 where eid= v_a;
  end if;
END PRO_ENGLISH;

 

存储过程写好后,编制作业:

 sql>variable   job   number;  
  sql>   begin    
      DBMS_JOB.SUBMIT(:jobno,//job号  
                                  'pro_english;',//要执行的过程名称  
                                  trunc(sysdate)+1/24,//下次执行时间  
                                  'trunc(sysdate)+1/24+1'//每次间隔时间  
                                );  
      end;       
  但记住看看在你的init文件中,有没有加上参数  

sql>show parameter job;
  JOB_QUEUE_PROCESSES   不能为0,该参数表示同时执行的作业数。
  JOB_QUEUE_INTERVAL