Job: TO_CHAR(CURRENT_TIMESTAMP, 'HH24MISSFF') error

問題

$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博客 ” ,链接:http://blog.itpub.net/25583515/viewspace-2146427/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25583515/viewspace-2146427/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值