windows XP系统下,ORACLE 10g版本
我想在建一个JOB脚本在PL/SQL导入,
想实现的功能是:每隔一分钟执行一遍SL_SP_HLOG存储过程。
脚本如下:declare job number;
begin
dbms_job.submit(job,
'SL_SP_HLOG;',
sysdate,
'trunc(sysdate)+1/(24*60)'
);
commit;
end;运行结果报错如下:
ORA-23420: ????????????????
ORA-06512: ? "SYS.DBMS_JOB",line 57
ORA-06512: ? "SYS.DBMS_JOB",line 57
ORA-06512: ? line 57

解决方案 »

  1.   

    我还试过在oracle 的 job 用户界面上建job,
    what栏输入:SL_SP_HLOG;
    next date栏输入:sysdate
    interval栏输入:trunc(sysdate)+1/24+1还是会报ORA-06550错误。
      

  2.   

    错误是:间隔必须以将来的一个时间作评估,
    你的trunc(sysdate)的时间是当天的0点,是一个过去的时间,你需要把它设置成未来的时间
      

  3.   

    最后还少了一个参数:no parse
    应该这样:
    declare job number;
    begin
    dbms_job.submit(job,
    'SL_SP_HLOG;',
    sysdate,
    'trunc(sysdate) + 1 + 1/(24*60)',
    true
    );
    commit;
    end; 
      

  4.   

    declare
    job number;
    begin
    sys.dbms_job.submit(job => job,
                          what => 'SL_SP_HLOG;',
                          next_date => sysdate,
                          interval => 'sysdate+ 1/(24*60)');
    commit;
    end;
    /
      

  5.   

    已经通过,非常感谢!
    不过还想多请教个问题:
    next_date参数 指识何时将运行这个工作
    那么这个参数带入sysdate是表示从创建这个job开始就会被运行吗?
      

  6.   

    用你这种方法JOB已经创建成功,但是为什么程序没有被调用过?(SL_SP_HLOG程序我调试过是正确的,每执行一次将会忘目标表中插入一笔数据)
      

  7.   

    应该是的,只要数据库允许job运行,因为设置的next_date是sysdate,创建完成后它就会自动运行一次
      

  8.   

    select * from user_jobs
    查询一下看看
      

  9.   

    4楼的脚本,需要去掉job =>,what =>,next_date =>,interval =>,然后再增加一个参数:no parse :true,才能在PL/SQL中导入,创建成功。
    即下面的代码是可以在PL/SQL中成功被执行的。
    declare
    job number;
    begin
    sys.dbms_job.submit(job,
                        'SL_SP_HLOG;',
                        sysdate,
                        'sysdate+ 1/(24*60)',
                        ture  
    );
    commit;
    end;
    /
    ------
    linzi:
    我查找过表user_jobs,是由job的,但是我看过我的目标表,没有新增数据,说明SL_SP_HLOG程序并没有被自动执行过。
      

  10.   

    user_jobs里面有些数据:last_date,next_date,failures,broken这些,看看有没有什么不正常的?
      

  11.   

    last_date,next_date,failures,broken
    ---------------------------------------
               4000-1-1   16        Ylast_date 空值
    next_date 4000-1-1
    failures 16
    broken Y
      

  12.   

    是已经运行了,你的过程有问题,都出错16次了,job已经变成broken的了。
      

  13.   

    是不是被调用的存储过程,不允许 out 参数的?
      

  14.   

    你没有run
    select * from user_jobs;
    查你的job号;
    exec dbms_job.run(job号);
      

  15.   

    都已经错了16次了,怎么还没有run,肯定是过程的问题
      

  16.   

    我刚才将我的程序 out 参数全部去掉了,然后再执行
    BEING
    dbms_job.run(JOBNO);
    END;
    现在可以了。
    我不知道是不是因为程序中的out参数引起的,我再测试下看看
      

  17.   

    我将过程中的out参数再放回去,发现FAILURES字段又开始报错了,看来是过程中的out参数引起的。
    定时器调用的过程看来是不允许返回参数的。
    目前的问题应该算是解决了,学到了很多,谢谢各位的指点,辛苦辛苦了,祝圣诞节快乐O(∩_∩)O