ITPub博客

首页 > 数据库 > Oracle > Job: TO_CHAR(CURRENT_TIMESTAMP, 'HH24MISSFF') error

Job: TO_CHAR(CURRENT_TIMESTAMP, 'HH24MISSFF') error

原创 Oracle 作者:guocun09 时间:2017-10-26 12:04:13 0 删除 编辑

問題:

$date -R

Fri, 10 May 2013 14:51:40 +0800

$date -u

Fri May 10 06:51:45 UTC 2013

 

CREATE TABLE GC.TEST_JOB_TIMESTAMP

(  SYST       VARCHAR2(50 BYTE),

  CURRENT_T  VARCHAR2(50 BYTE),

  TIMES      DATE)


CREATE OR REPLACE procedure GC.TEST_TIMESTAMP is

begin

INSERT INTO  GC.TEST_JOB_TIMESTAMP

SELECT  TO_CHAR (sysTIMESTAMP, 'YYYYMMDD')

          ||'T'||SUBSTR (TO_CHAR (sysTIMESTAMP, 'HH24MISSFF'), 1, 9) sysT,

          TO_CHAR (CURRENT_TIMESTAMP, 'YYYYMMDD')

          ||'T'||SUBSTR(TO_CHAR(CURRENT_TIMESTAMP, 'HH24MISSFF'), 1, 9) CURRENT_T,SYSDATE

     FROM DUAL;

END;


DECLARE

  X NUMBER;

BEGIN

  SYS.DBMS_JOB.SUBMIT

  ( job       => X

   ,what      => 'GC.TEST_TIMESTAMP;'

   ,next_date => to_date('10/05/2013 13:49:29','dd/mm/yyyy hh24:mi:ss')

   ,interval  => 'SYSDATE+10/1440'

   ,no_parse  => FALSE

  );

  SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));

COMMIT;

END;

 

 

設置了job執行下面的過程后發現insert到GC.TEST_JOB_TIMESTAMP的數據為

SYST                   CURRENT_T              TIMES

20130510T143935026             20130510T063935026       2013/5/10 下午 02:39:35

 

TO_CHAR(CURRENT_TIMESTAMP, 'HH24MISSFF'), 1, 9)比正常系統時間的慢了8個小時

 

實驗證明:

設置

ALTER SESSION SET NLS_LANGUAGE='AMERICAN' ;

ALTER SESSION SET NLS_TERRITORY='AMERICA' ;

ALTER SESSION SET NLS_CURRENCY='$' ;

ALTER SESSION SET NLS_ISO_CURRENCY='AMERICA' ;

ALTER SESSION SET NLS_NUMERIC_CHARACTERS='.,' ;

ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-RR' ;

ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN' ;

ALTER SESSION SET NLS_SORT='BINARY';

時間問題和DBA_JOBS中的NLS_ENV欄位並無關係

 

後來發現Oracle執行JOB時首先會

alter session set time_zone='UTC';

然後再取時間

SELECT sysTIMESTAMP,CURRENT_TIMESTAMP FROM DUAL

只能用 SYSTIMESTAMP 取DB server的時間和時區

 

UTC

是世界統計標準時區默認 的 0:0區

所以我們看到的時間都慢了8個小時

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25583515/viewspace-2146427/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
DBA,掌握Oracle,SQLServer,MySQL,hadoop,casscandra等数据库。喜爱深入研究数据库技术原理,擅长管理和优化工作。

注册时间:2011-10-02

  • 博文量
    177
  • 访问量
    686665