有一张contract表,里面有一个字段是contractdate字段
问题:
我想每个月的一日自动运行SQL语句,并且这条语句只取上个月1日到本月1日之间的所有的合同
这样的SQL怎么写?
是否需要配合job一起?

解决方案 »

  1.   

    写个存储过程
    然后用个JOB来实现
      

  2.   

    job怎么写每个月1日运行存储过程?
    麻烦给各详细的写法,谢谢。
      

  3.   

    给你看个每个月1号运行JOB
    BEGIN 
      SYS.DBMS_JOB.REMOVE(181);
    COMMIT;
    END;
    /DECLARE
      X NUMBER;
    BEGIN
      SYS.DBMS_JOB.SUBMIT
      ( job       => X 
       ,what      => 'CHINA.SP_MAKE_AB071
      (''SYSTEM'' /* VARCHAR2 */  );'
       ,next_date => to_date('01/12/2008 02:00:00','dd/mm/yyyy hh24:mi:ss')
       ,interval  => 'TRUNC(LAST_DAY(SYSDATE)) + 1+1/12'
       ,no_parse  => FALSE
      );
      SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
    COMMIT;
    END;
    /其中 interval  => 'TRUNC(LAST_DAY(SYSDATE)) + 1+1/12'就是每个月的1号的一点
    其实也可以这样
    trunc(add_months(sysdate,1),'mm')
    这个也是到每个月的1号0点
      

  4.   

    VARIABLE JOBNO NUMBER;
    begin
      sys.dbms_job.submit(:JOBNO,
                          'insert ino table_name(zs) 
                                      select count(*) from contract 
                                       where contractdate >= add_months(trunc(sysdate,''mm''),-1) ;',
                          sysdate,
                          'add_months(trunc(sysdate,''mm''),1)');  
      commit;
    end;
    /
      

  5.   

    谢谢各位大虾
    我说清楚一点
    我有一个存储过程名字叫ctmc_updateprice_proc
    我现在要写一个job,名字无所谓
    目的就是每个月的1日凌晨运行存储过程。
    哪位大哥麻烦把写法发出来谢谢!
      

  6.   

    如果是简单的计算总数,直接在JOB里写SQL即可.VARIABLE JOBNO NUMBER;
    begin
      sys.dbms_job.submit(:JOBNO,
                          'insert into table_name(zs) -- 你的表名字段.
                                      select count(*) from contract 
                                       where contractdate >= add_months(trunc(sysdate,''mm''),-1) ;commit;',
                          sysdate,
                          'add_months(trunc(sysdate,''mm''),1)');  
      commit;
    end;
    /
      

  7.   

    begin
      sys.dbms_job.submit(job       => :job,
                          what      => 'ctmc_updateprice_proc;',
                          next_date => to_date('2008-12-1 00:00:00',
                                               'yyyy-mm-dd hh24:mi:ss'),
                          interval  => 'trunc(add_months(sysdate,1) ,' mm ')');
      commit;
    end;
    /
      

  8.   

    直接修改all_jobs,把你的过程加进去,试试。应该可以。
      

  9.   

    如果是window系统新建个任务计划 设定时间执行运行文件
      

  10.   

    declare
    job number;
    begin
      sys.dbms_job.submit(job       => job,
                          what      => 'ctmc_updateprice_proc;',
                          next_date => to_date('2008-12-1 00:00:00',
                                               'yyyy-mm-dd hh24:mi:ss'),
                          interval  => 'trunc(add_months(sysdate,1) ,' mm ')');
      commit;
    end;
    /这样就可以执行了
    呵呵
      

  11.   

    上面的代码我运行还是抱错
    ora-06550:第八行,第六十七列;
    pls-00103:出现符号“MM”在需要下列之一时。。
    咋回事?
      

  12.   

    declare
    job number;
    begin
      sys.dbms_job.submit(job      => job,
                          what      => 'ctmc_updateprice_proc;',
                          next_date => to_date('2008-12-1 00:00:00',
                                              'yyyy-mm-dd hh24:mi:ss'),
                          interval  => 'trunc(add_months(sysdate,1) ,''mm'')');
      commit;
    end;