一天执行一次?0点?
dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate)+1');

解决方案 »

  1.   

    你看过上面的问题没有啊?问题看清楚点啊·很难说清楚的。我不是不会写一个作业一天0点执行一次的作业。
    你上面写的是什么时候提交就什么时候执行,频率是一天一次,
    每天多点执行一次应该是:
    dbms_job.submit(jobno,'pro;',to_date(to_char(sysdate,'yyyy-mm-dd')||' 00:00:00'),'yyyy-mm-dd hh24:mi:ss'),'trunc(sysdate)+1');
    但这些都不是我的问题!
      

  2.   

    没看懂:
    dbms_job.submit(jobno,'pro;',trunc(sysdate),'sysdate+1/(24*60)'); /一分钟
    ->但是我写的作业是希望他 一秒 执行一次的 你想不执行完当前的作业继续作下一个是不可能的
      

  3.   

    不是啊。现在的问题是就向你上面的写的那样,但如果作业执行的过程是写入一条记录SYSDATE,那你看看那结果是什么:TO_CHAR(B,'YYYY-MM-
    -------------------
    2003-09-08 11:08:28
    2003-09-08 11:09:30
    2003-09-08 11:10:31
    2003-09-08 11:11:33
    2003-09-06 17:39:00
    2003-09-06 17:40:02
    2003-09-06 17:41:04
    2003-09-06 17:42:05
    2003-09-06 17:43:07
    2003-09-06 17:44:08
    2003-09-06 17:45:10
    他是一分零一秒执行一次。多一秒是因为那过程的执行时间大概是一秒。现在假设我建立的作业是1天执行一次(必须在00:00:00执行),
    如果那过程要30分钟才执行完成,那么下次的执行时间还是00:00:00吗?肯定不是了,你看上面的数据就知道了,应该是在00:30:00。但是我要求必须在00:00:00执行。
      

  4.   

    TO_CHAR(B,'YYYY-MM-
    -------------------
    2003-09-08 10:57:12 //假设那作业是在2003-09-08 10:57:12开始。那应该是:
    2003-09-08 10:58:13   2003-09-08 10:58:12
    2003-09-08 10:59:15   2003-09-08 10:59:12
    2003-09-08 11:00:16   2003-09-08 11:00:12
    2003-09-08 11:01:18   2003-09-08 11:01:12
    2003-09-08 11:02:19    ....
    2003-09-08 11:03:21
    2003-09-08 11:04:22
    2003-09-08 11:05:24
    2003-09-08 11:06:25
    2003-09-08 11:07:27
      

  5.   

    就是啊!
    你的 pro 都要执行一分多钟啊!怎么可能设置一个 job 让它一秒执行一次???
    要不多设几个 job 啊?不过又很难保证同一秒只有一个 pro 在执行哦!
      

  6.   

    所以说使用trunc()来过规范一下嘛
    我认为这样写没有问题:
    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate)+1');测试的话用:间隔1分钟
    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,'mi')+1/(24*60)');测试结果贴出来看看,应该没问题
      

  7.   

    不是啊·
    你把前面的全忘记掉!
    再看?:
    假设现在的PRO要30分钟来执行。我现在需要一天执行一次。必须在00:00:00执行。
    但是结果是第一天执行的时候是准确的,在00:00:00。但第二天是在00:30:00
    第三天是在01:00:00。
    不要告诉我是因为你的PRO药0分钟执行。
    我现在要的是要次次都在00:00:00执行。不管你PRO要执行多久。(反正会出现一次没有执行完下次执行时间又到了)
      

  8.   

    所以说使用trunc()来过规范一下嘛
    我认为这样写没有问题:
    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate)+1');测试的话用:间隔1分钟
    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,'mi')+1/(24*60)');测试结果贴出来看看,应该没问题
      

  9.   

    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,'mi')+1/(24*60)');
                                                                 *
    ERROR 位于第 4 行:
    ORA-06550: 第 4 行, 第 62 列:
    PLS-00103: 出现符号 "MI"在需要下列之一时:
    .(),*@%&|=-+</>atinmodnot
    rangerem=>..<an exponent (**)><> or != or ~=>=<=<>andorlike
    betweenis nullis not||is dangling
    符号 ".在 "MI" 继续之前已插入。
      

  10.   

    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,''mi'')+1/(24*60)');
    建立成功。
    结果等下再看。
      

  11.   

    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,''mi'')+1/(24*60)');
      

  12.   

    结果出来了。也有问题:
    TO_CHAR(B,'YYYY-MM-
    -------------------
    2003-09-08 15:01:00
    2003-09-08 15:02:01
    2003-09-08 15:03:03
    2003-09-08 15:04:04
    他是一秒多一点执行一次。
    我现在要求的是执行的开始时间!!!。
      

  13.   

    我看不出语句有什么问题
    我现在没有环境,有的话一定试一下
    alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
    select trunc(sysdate,'mi') from dual;
    我看一下你执行的结果
      

  14.   

    TRUNC(SYSDATE,'MI')
    -------------------
    2003-09-08 15:17:00
      

  15.   

    这句到底是这个:
    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,'mi')+1/(24*60)');
    还是:
    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,''mi'')+1/(24*60)');
    第一个我执行的时候包错。
    第二个可以完成。
      

  16.   

    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,''mi'')+1/(24*60)');
      

  17.   

    用'trunc(sysdate,''dd'')+1
    我正在装数据库,等会儿我自己做一下
      

  18.   

    你的意思是那trunc(sysdate,''dd'')的作用是把时间准确到天?
    如果trunc(sysdate,''mi'')的话就是在每分钟的开始的地方执行?
    我大概明白你的意思,你看:
             A B
    ---------- -------------------
             1 2003-09-08 15:30:23
             1 2003-09-08 15:31:04
             1 2003-09-08 15:32:06
             1 2003-09-08 15:33:07
             1 2003-09-08 15:34:09
             1 2003-09-08 15:35:10
    我在执行建立作业的语句的时间是在2003-09-08 15:30:23,他立即执行了一次作业的过程。,到了下一分钟,虽然时间没有到我们社顶的间隔,但是到了每分钟的开始,所以又执行了一次,但是下面就不是这样了。接着就是一直加上去了。也就是说在第二次作业执行的时候那TRUNC有用,。接下来又没用了。
      

  19.   

    你的结果是对的!你看:哈哈虽然不是很准,但也不会把时间一直往后推。在01-10之间。
             1 2003-09-08 15:30:23//刚提交时候执行的
             1 2003-09-08 15:31:04//
             1 2003-09-08 15:32:06
             1 2003-09-08 15:33:07
             1 2003-09-08 15:34:09
             1 2003-09-08 15:35:10//到10秒了。
             1 2003-09-08 15:36:01//又回到01开始执行了
             1 2003-09-08 15:37:03
             1 2003-09-08 15:38:04
             1 2003-09-08 15:39:06
             1 2003-09-08 15:40:07
             1 2003-09-08 15:41:09
             1 2003-09-08 15:42:10//加到10 
             1 2003-09-08 15:43:01//又到01了。
    如果我要他每天在00:00:00执行是不是就这样:
    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,''dd'')+1/(24*60)');
    ?????
    他就一定会在每天的凌晨执行?虽然不能精确到00:00:00,但至少也叫做是晚上啊!。
    以后那时间的推迟只要不是垒加就可以了,偏差到一定的时候她会去调整就可以了。
      

  20.   

    怎么叫他不要自己运行的?
    比如:
    dbms_job.submit(jobno,'pro;',trunc(sysdate),'trunc(sysdate,''dd'')+1/(24*60)');
    他就在今天晚上00:00:00才运行?
    是不是:
    dbms_job.submit(jobno,'pro;',to_date('2003-9-8 00:00:00','yyyy-mm-dd hh24:mi:ss'),'trunc(sysdate,''dd'')+1/(24*60)');
      

  21.   

    SQL> create user temp identified by temp;用户已创建SQL> grant connect,resource to temp;授权成功。SQL> connect temp/temp;
    已连接。
    SQL> create table t_dtime(c_time date);表已创建。SQL> declare
      2   jobno number;
      3  begin
      4   dbms_job.submit(jobno,'insert into t_dtime values(sysdate);',trunc(sysdate),'trunc(sysdate,'
    i'')+1/(24*60)');
      5  commit;
      6  end;
      7  /PL/SQL 过程已成功完成。SQL> select last_date,next_date from all_jobs;LAST_DATE           NEXT_DATE
    ------------------- -------------------
    2003-09-08 16:11:09 2003-09-08 16:12:00SQL> /LAST_DATE           NEXT_DATE
    ------------------- -------------------
    2003-09-08 16:12:01 2003-09-08 16:13:00SQL> select last_date,next_date from all_jobs;LAST_DATE           NEXT_DATE
    ------------------- -------------------
    2003-09-08 16:13:02 2003-09-08 16:14:00SQL> select * from t_dtime;C_TIME
    -------------------
    2003-09-08 16:09:47
    2003-09-08 16:10:07
    2003-09-08 16:11:09
    2003-09-08 16:12:01
    2003-09-08 16:13:02SQL> select * from t_dtime;C_TIME
    -------------------
    2003-09-08 16:09:47
    2003-09-08 16:10:07
    2003-09-08 16:11:09
    2003-09-08 16:12:01
    2003-09-08 16:13:02SQL> select last_date,next_date from all_jobs;LAST_DATE           NEXT_DATE
    ------------------- -------------------
    2003-09-08 16:15:04 2003-09-08 16:16:00SQL> select * from t_dtime;C_TIME
    -------------------
    2003-09-08 16:09:47
    2003-09-08 16:10:07
    2003-09-08 16:11:09
    2003-09-08 16:12:01
    2003-09-08 16:13:02
    2003-09-08 16:14:03
    2003-09-08 16:15:04已选择7行。SQL> 
    每次系统调用执行job花费的时间可能有长有短,但next_date是不会有偏差所以用'trunc(sysdate,''dd'')+1,肯定没有问题!
      

  22.   

    DBMS_JOB.SUBMIT(:jobno,//job号
                    'your_procedure;',//要执行的过程
                    trunc(sysdate)+1/24,//下次执行时间
                    'trunc(sysdate)+1/24+1'//每次间隔时间
                   );
    删除job:dbms_job.remove(jobno);
    修改要执行的操作:job:dbms_job.what(jobno,what);
    修改下次执行时间:dbms_job.next_date(job,next_date);
    修改间隔时间:dbms_job.interval(job,interval);
    停止job:dbms.broken(job,broken,nextdate);
    启动job:dbms_job.run(jobno);