Oracle库中有一张标orderhist(订单表),orderid(订单编号)为主键, 另外一张表orderdet(订单详情表)是orderhist的从表,现在需要实现,把orderhist表三天前的数据给定时清掉,如何实现?

解决方案 »

  1.   

    orderhist(订单表)或orderdet(订单详情表)有表示时间的字段吗?两个表之间如何关联?
      

  2.   

    用Job實現吧,定時執行指定的語句.
      

  3.   

    orderhist表字段: 
    crdt  订购日期
    senddt 发货日期
    fbdt   反馈日期
    outdt  分拣日期  
    orderdet表字段:
    ORDERDT  订购日期
    RECKONINGDT 结账日期
    fbdt       反馈日期。
    到时候就按照订购日期来计算事件 两张表之间就是通过主外键联系   
      

  4.   

    定期清除,使用job最好了,楼主可以查查job
      

  5.   

    先根据时间段清除从表orderdet的记录,再清主表orderhist。
      

  6.   

    如何写SQL语句:delete from orderhist od where od.crdt.....这个where后面条件如何写,条件应该是离当前3天时间
      

  7.   


    CREATE OR REPLACE PROCEDURE del_orderhist AS
    BEGIN
      --先删除从表orderdet
      DELETE FROM orderdet WHERE 外键=(SELECT orderid FROM orderhist WHERE crdt<sysdate-3);
      --再删除主表orderhist 
      DELETE FROM orderhist WHERE crdt<sysdate-3;
      COMMIT;
    END del_orderhist;用JOB定时调用
      

  8.   


    CREATE OR REPLACE PROCEDURE del_orderhist AS
    BEGIN
      --先删除从表orderdet
      DELETE FROM orderdet WHERE 外键=(SELECT orderid FROM orderhist WHERE crdt>=sysdate-3);
      --再删除主表orderhist 
      DELETE FROM orderhist WHERE crdt>=sysdate-3;
      COMMIT;
    END del_orderhist;
      

  9.   

    如果我要它每天都运行一次,是不是这样写:
    variable job1 number; 
    begin 
    dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/365);  
    end; 
      

  10.   

    每天运行一次:
    sysdate+1而不是sysdate+1/365
      

  11.   

    一直用sysdate+1,但是1/365是不是也能表示一天呢?
      

  12.   

    写一个job和一个存储过程即可,用job调用存储过程
      

  13.   

    create or replace procedure operfile_proc as 
    begin 
     delete from operatorfile where otime<sysdate-3;
     end ;
     
    declare job1 number;
    begin
     dbms_job.submit(:job1,'operfile_proc;',sysdate,'sysdate+1');
     commit;
     end;
     
     
     begin 
     dbms_job.run(:job1);
     end;执行declare job1....
    报错:ORA-01008:并非所有变量都已关联
    什么原因?
      

  14.   

    搞定:
    全码如下
    create or replace procedure operfile_proc as 
    begin 
    delete from operatorfile where otime<sysdate-3;
    end;
     
    declare job1 number;
    begin
    dbms_job.submit(job1,'operfile_proc;',sysdate,'sysdate+1);
    end;begin 
    dbms_job.run(1);
    end;但是有点不明白 
    dbms_job.run(1)为什么里面是1  换成 dbms_job.run(job1);就会报错
    望指点?