我想实现这样的功能,我想定时删除表中的没有被启用的记录。
     可是我一运行存储过程就删除了,并没有在规定的时间里删除,而是一运行就删除啦,奇怪。请各位大侠帮忙。
     以下是我写的测试程序。

1,创建表
create table CJ_JT_NSRCPDMDY
(
  ID     VARCHAR2(40)  not null primary key, 
  CPBH   VARCHAR2(80)  not null,
  NSRBH  VARCHAR2(80)  not null,
  BZ     VARCHAR2(80)
);2,测试数据insert into CJ_JT_NSRCPDMDY values(1,001,001,'启用');
insert into CJ_JT_NSRCPDMDY values(2,002,002,'启用');
insert into CJ_JT_NSRCPDMDY values(3,003,003,'不启用');3,创建一个删除垃圾记录的存储过程create or replace procedure mypro as
begin
delete from CJ_JT_NSRCPDMDY where BZ = '不启用';
end;
/
过程以创建
4,创建JOB,实现每个月第一天的午夜12点删除CJ_JT_NSRCPDMDY中不启用的记录。variable job number;
begin
dbms_job.submit(:job,'mypro;',sysdate,'trunc(last_day(sysdate)+1)');
end;
/
5,运行JOB
begin
dbms_job.run(:job);
end;
/
过程已成功完成6,select * from CJ_JT_NSRCPDMDY;
得到预期结果//这个地方应该是查出来3条记录才对,可是已经把不启用的记录提前删除啦。不知道为什么。

解决方案 »

  1.   

    variable job number;
    begin
    dbms_job.submit(:job,'mypro;',sysdate,'trunc(last_day(sysdate)+1)');
    commit;  --这里加上commit
    end;
    /第5步不要运行,run的意思就是直接运行了
    5,运行JOB
    begin
    dbms_job.run(:job);  
    end; 
      

  2.   


    variable job number; 
    begin 
    dbms_job.submit(:job,'mypro;',trunc(last_day(sysdate)+1)--不应该为sysdate,否则创建作业时,就马上启动作业
    ,'trunc(last_day(sysdate)+1)'); 
    end; 
      

  3.   

    我把一楼三楼的一起用啦,
    4,创建JOB,实现每个月第一天的午夜12点删除CJ_JT_NSRCPDMDY中不启用的记录。variable job number;
    begin
    dbms_job.submit(:job,'mypro;',trunc(last_day(sysdate)+1),'trunc(last_day(sysdate)+1)');
    commit;
    end;
    /谢谢