在plsql开发工具中,对oracle操作。
SQL> create or replace procedure PRCO_CWGL_DSTJ as
  2  begin
  3        insert into cw0623 select * from cw0622;
  4        --commit;
  5         --to_date('20110731010100','yyyy-mm-dd hh24:mi:ss'),
  6         --'ADD_MONTHS(trunc(sysdate,'yyyy'),7) + 1/24'
  7         --'ADD_MONTHS(trunc(sysdate,'yyyy'),8) +28+ 14/24'
  8     --);
  9  end;
 10  /
 
Procedure createdSQL> variable nob number;
SQL> 
SQL> begin
  2     dbms_job.submit(:nob,'PRCO_CWGL_DSTJ',sysdate,'SYSDATE + 3/1440');
  3  
  4   end;
  5  /ORA-06550: 第 1 行, 第 108 列: 
PLS-00103: 出现符号 "END"在需要下列之一时:
 := . ( @ % ;
符号 ";" 被替换为 "END" 后继续。
ORA-06512: 在 "SYS.DBMS_JOB", line 79
ORA-06512: 在 "SYS.DBMS_JOB", line 136
ORA-06512: 在 line 3
nob
---------这是什么错误。我快疯了。
神啊,就我啊。

解决方案 »

  1.   


    begin
      sys.dbms_job.submit(job => :job,
                          what => ''PRCO_CWGL_DSTJ;',
                          next_date => to_date('01-08-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'to_date(to_char(sysdate + 1,''yyyymmdd'')||''010000'',''yyyymmddhh24miss'')');
      commit;
    end;
    /
      

  2.   


    --上面多写了个引号,用这个
    begin
      sys.dbms_job.submit(job => :job,
                          what => 'PRCO_CWGL_DSTJ;',
                          next_date => to_date('01-08-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'to_date(to_char(sysdate + 1,''yyyymmdd'')||''010000'',''yyyymmddhh24miss'')');
      commit;
    end;
    /
      

  3.   

    interval => 'to_date(to_char(sysdate + 1,''yyyymmdd'')||''010000'',''yyyymmddhh24miss'')'
    这句话的意思是什么?
      

  4.   

    每年的8月1日 凌晨1时interval => 'to_date(to_char(sysdate + 1,''yyyy'')||''0801010000'',''yyyymmddhh24miss'')'
    是不是这样写才是? 
      

  5.   

    在过程执行完毕后 
     
    PL/SQL procedure successfully completed
    job
    ---------
    81这里job 81是什么意思?
      

  6.   


    --我上面写的是每天的凌晨1点,你说的每年的8月1号的凌晨1点应该是这样:
    begin
      sys.dbms_job.submit(job => :job,
                          what => 'PRCO_CWGL_DSTJ;',
                          next_date => to_date('01-08-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'to_date(to_char(add_months(sysdate,12),''yyyymmdd'')||''010000'',''yyyymmddhh24miss'')');
      commit;
    end;
    /
      

  7.   

    interval => 'to_date(to_char(sysdate + 1,''yyyymmdd'')||''010000'',''yyyymmddhh24miss'')'
    这句话的意思是什么?这就是设置下次执行时间是明年的8月1号凌晨1点
    在过程执行完毕后  
     
    PL/SQL procedure successfully completed
    job
    ---------
    81这里job 81是什么意思? 81是job的存在数据库中的编号
      

  8.   

    关闭很简单啊 直接改下次执行时间为你这辈子也看不到的时间 呵呵 比如 4000-01-01
    或者设置dbms_job.submit中的broken参数为true
    执行多个存储过程的话,
    what => 'PRCO_CWGL_DSTJ;'  这里有几个过程就写几个,之间用分号隔开,记得最后也要分号的
      

  9.   

    SQL> select job,next_date,next_sec,failures,broken from user_jobs;
     
           JOB NEXT_DATE   NEXT_SEC           FAILURES BROKEN
    ---------- ----------- ---------------- ---------- ------
            81 2011/9/30 1 01:00:00                  0 N
     
    SQL> dbms_job.remove(81);
    这样是删除吗?为什么不行
    ORA-00900: 无效 SQL 语句
      

  10.   

    我这里还一个疑问?
    在what => '过程1;过程2;'
    这里过程执行顺序,是过程1执行完了,再执行过程2吗?
    还是两个同事进行?
    我现在是想要 过程2在过程1执行完后,再执行,有什么办法没?
      

  11.   


    --删除JOB
    SQL> select job,next_date,next_sec,failures,broken from user_jobs;
     
           JOB NEXT_DATE NEXT_SEC     FAILURES BROKEN
    ---------- ----------- ---------------- ---------- ------
            41 2011-9-29 2 23:51:54              0 N
     
    SQL> begin
      2  dbms_job.remove(41);
      3  end;
      4  /
     
    PL/SQL procedure successfully completed
     
    SQL> commit;
     
    Commit complete
     
    SQL> select job,next_date,next_sec,failures,broken from user_jobs;
     
           JOB NEXT_DATE NEXT_SEC     FAILURES BROKEN
    ---------- ----------- ---------------- ---------- ------
     
    SQL>--what => '过程1;过程2;' 这里的过程是串行的,不是并行的--next_date => to_date('01-08-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss')  
    这里就是执行时间为今年的8月1号 然后加上interval里的间隔 不就是以后每年的8月1号