比如有一个表
create table TEST(a date);
2....
SQL> create or replace procedure MYPROC as
  2  begin
  3  insert into TEST values(sysdate);
  4  end;
  5  /
3.... 
variable job1 number;
 begin
 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440'); --每天1440分钟,即一分钟运行test过程一次
 end;
4..
运行JOB
SQL> begin
  2  dbms_job.run(:job1);
  3  end;
  4  /
这没有什么问题,可是我想写个这样的过程,完成下面的功能。
1..把 3,4 写到一个过程里,由外面传进来几个参数,根据常数建立作业,并且这个作业是在我指定的时间运行一次(就上 1 过程的语句)
2..当上面的一步完成了以后,再修改自己的作业时间(比如现在是1点,通过计算知道下一次运行的时间是3点,自己修改自己的运行时间?(这里我不知道可以吗?))
3。完成,就可以退出了,然后在3点运行,在执行上面的几个步骤。。
我现在把3 写到一个过程里,就死命的报错,气死了?
请大家帮忙????

解决方案 »

  1.   

    有UNIX环境吗?我觉得这个在SHELL或TCL脚本里做很方便的,在存储过程中做恐怕不行。在SHELL中可这样处理:
    1.sqlplus调用存储过程执行;
    2.执行完毕,计算下次执行时间;
    3.在crontab加一条记录,设定时间执行自身脚本(如果执行自身脚本的记录存在,则修改执行时间)。
    4.退出。当然执行前最好判断一下,是否自己已经在执行(可能上一次执行未完);
    另外因为是后台自动执行,执行过程中要记录一些日志,便于查询当前和历史执行状态。
      

  2.   

    SQL> VARIABLE jobno number;
    SQL> begin
      2  DBMS_JOB.SUBMIT(:jobno, 'test;',SYSDATE,'SYSDATE +1/1440');
      3  commit;
      4  end;
      5  /
    test 为存储过程名。定时间间下面。
    SQL> variable jobno number;
    SQL> begin
      2  dbms_job.submit(:jobno,'test;',to_date('20-09-2005 03:00:00', 'dd-mm-yyyy hh24:mi:ss'),'sysdate+1');
      3  commit;
      4  end;
      5  /
      

  3.   

    我是win2000的环境,我希望把
    SQL> variable jobno number;
    SQL> begin
      2  dbms_job.submit(:jobno,'test;',to_date('20-09-2005 03:00:00', 'dd-mm-yyyy hh24:mi:ss'),'sysdate+1');
      3  commit;
      4  end;
      5  /
    写到一个过程里,老是错误,是怎么的?