表一: t1 
字段:序号 00000001    书名:心灵鸡汤 价格:34 作者:tom
      序号 00000002   书名:幽默杂志  价格20 作者:fet
表二: t2 
字段:序号 书名 价格
实现功能
     每天早八点提取表一中序号,书名,价格字段内容加到表二中,每个2小时执行一次,晚上八点结束
每周日 根据表一中的数据将表二中的所有的数据都update一遍
因为对表一的操作是在应用程序中进行的,因此无法在将数据插入表一的同时插到表二中,所以想了这个办法。 现在的问题:如何实现每天的这种定时操作。表一是每天更新的

解决方案 »

  1.   

    看一下oracle的job方面的资料。
      

  2.   

    假如你想同步更新的话,可以考虑触发器。或者snapshot。
      

  3.   

    写个过程然后使用JOB来定期执行。主题: 如何写根据时间执行JOB?
    假设有一个存储过程p_test,每20分钟执行一次
    解答:
    1、把init<sid>.ora中如下两个参数打开
     JOB_QUEUE_INTERVAL=60
     JOB_QUEUE_PROCESSES=4
     job_queue_keep_connections=true 然后重启一个库,如果原来已经打开了则不用这步了
    2、示例,以下由sqlplus 来执行,具体参照一下相关的文档
     VARIABLE jobno number;
     BEGIN
       DBMS_JOB.SUBMIT(:jobno,
         'p_test;'
         SYSDATE,'SYSDATE + 1/72');
       commit;
     END;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);
    例子:
    VARIABLE jobno number;
    begin
          DBMS_JOB.SUBMIT(:jobno,
                  'Procdemo;',
                   SYSDATE, 'SYSDATE + 1/720');
             commit;
    end;
    /