我想用JOB执行一个存储过程循环向一个表插入当前时间,但在实际操作中发现,用JOB执行时,插入的时间就不对了,单独执行插入语句,时间就是正确的,很困惑,希望高手解答。创建表
create table test (edata char(20));创建存储过程
create or replace procedure insert_test as 
begin
insert into test values(to_char(current_date,'DD-MM-YYYY hh24:mi:ss'));
commit;
end insert_test;创建作业,10秒一次
declare
 job number;
begin
 dbms_job.submit(job,'insert_test;',sysdate,'sysdate+10/(24*60*60)');
end;实际结果
select * from test;
21-01-2013 14:31:24  //直接执行插入
21-01-2013 14:31:27  
21-01-2013 14:32:40  
21-01-2013 06:36:05  //用JOB执行的插入
21-01-2013 06:36:10  
21-01-2013 06:36:15  
21-01-2013 06:36:20  
21-01-2013 06:36:25  用JOB执行的插入时间少了8个小时,有高手知道原因吗?谢谢啦

解决方案 »

  1.   

    一个 current_date   是回话时间
    一个 sysdate  系统时间
    select current_date from dual;
    select sysdate from dual  这两个查询结果相同么你的
      

  2.   

    楼上正解
    SYSDATE   系统时间  
    CURRENT_DATE   会话时间 
     
    SYSDATE函数返回服务器的当前日期和时间,而CURRENT_DATE函数返回当前会话时中的当前日期和时间 
       
      一般情况下,二者相同。但如果修改了当前会话的时区,则会不同。  
    Sql代码  
    SQL>   SELECT   SESSIONTIMEZONE   FROM   DUAL;   
        
      SESSIONTIMEZONE   
      ------------------------------   
      +08:00   
        
      SQL>   SELECT   SYSDATE,CURRENT_DATE   FROM   DUAL;   
        
      SYSDATE                       CURRENT_DATE   
      -----------------   -----------------   
      20060211   20:04:51   20060211   20:04:51   
        
      SQL>   ALTER   SESSION   SET   TIME_ZONE='+09:00';   
        
      会话已更改。   
        
      SQL>   SELECT   SYSDATE,CURRENT_DATE   FROM   DUAL;   
        
      SYSDATE                       CURRENT_DATE   
      -----------------   -----------------   
      20060211   20:05:00   20060211   21:05:00   
      

  3.   

    把过程中的current_date换成sysdate吧!
      

  4.   

    这个问题搞清楚了,不是三位说的原因,是JOB频率我设置的太快了,我设置的1秒,我上面写的10秒,当JOB频率被设置为1秒时,就会出现我这个问题(插入时间少8小时),我设置成1秒虽然ORACLE可以自动调整为5秒,但插入时间时依然会出错。我这就是一个实验,实际环境也不可能5秒一个JOB把JOB频率调整低一点就不会出现我这个问题了,谢谢三位的解答。