job:variable job1 number;
begin
dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440');  --每天1440分钟,即一分钟运行test过程一次
end;procedure:create or replace procedure proc_sms_1 as
    begin
  insert into SMSC_MSGDOWNINTER(MSGID,MOBILEPHONE,MSGCONTENT,SENDTIME,USERID,ORGID,APPCODE)
  select SEQ_SMSC_MSGUPINTER.nextval,S3.MOBILEPHONE,cast(S2.CONTENT as varchar(1000)),S2.SENDPOINT,S1.USERID,S1.ORGID,'qq'
  from SMS_MSGBACHSENDTYPE S1,SMS_MSGBATCHSENDLOGMAIN S2,SMS_MSGBATCHSENDLOGDETAIL S3
  where 1=1
    and S1.BATCHSENDID = S2.BATCHSENDID
    and S2.SUBSCRIBEID = S3.SUBSCRIBEID
    and  to_char(sysdate,'yyyymmddhh24mi') = to_char(S2.Sendpoint,'yyyymmddhh24mi');
  commit;
    end;问题:当系统时间等于字段'S2.Sendpoint'里的时间时执行插入,(to_char(sysdate,'yyyymmddhh24mi') = to_char(S2.Sendpoint,'yyyymmddhh24mi');)
    可是不知为什么在系统时间还没到'S2.Sendpoint'的时间就插入了一条记录,然后再等到系统时间等于'S2.Sendpoint'里的时间时又插入了一条记录,为什么插入
    了两条记录,为什么系统时间还没到'S2.Sendpoint'字段里的时间就会自动插入一条记录呢..
    是不是这个语句写的有问题:to_char(sysdate,'yyyymmddhh24mi') = to_char(S2.Sendpoint,'yyyymmddhh24mi');
    请高手指点..

解决方案 »

  1.   

    select SEQ_SMSC_MSGUPINTER.nextval,S3.MOBILEPHONE,cast(S2.CONTENT as varchar(1000)),S2.SENDPOINT,S1.USERID,S1.ORGID,'qq' 
      from SMS_MSGBACHSENDTYPE S1,SMS_MSGBATCHSENDLOGMAIN S2,SMS_MSGBATCHSENDLOGDETAIL S3 
      where 1=1 
        and S1.BATCHSENDID = S2.BATCHSENDID 
        and S2.SUBSCRIBEID = S3.SUBSCRIBEID 
        and  to_char(sysdate,'yyyymmddhh24mi') = to_char(S2.Sendpoint,'yyyymmddhh24mi'); 你单独执行这条语句看看,是不是出现两条语句
      

  2.   

    只有一条,当我Sendpoint字段输入明天的时间时,如今天为2009-03-04,如果我将Sendpoint字段值输入为2009-03-05时,
    它就执行一条语句了.如果输入当天时间如:2009-03-04 12;12:34,它就会执行两次,其中第一次执行是满足'and S1.BATCHSENDID = S2.BATCHSENDID 
    and S2.SUBSCRIBEID = S3.SUBSCRIBEID'条件就执行了,第二次执行才是满足所有条件才执行的..
      

  3.   

    还有当我将to_char(sysdate,'yyyymmddhh24mi') = to_char(S2.Sendpoint,'yyyymmddhh24mi')这个条件改为
    to_char(sysdate,'yyyymmddhh24mi') = '20090304122536';时,它就执行一次了,没改之前是执行两次的..
    为什么?请高手指点..
      

  4.   

    to_char(sysdate,'yyyymmddhh24mi') = '20090304122536';
    不可能相等,'yyyymmddhh24mi'只包含了四位年两位月两位日两位小时两位分钟,没有包括秒