1

私の制御ファイルは

ACCESS_TIME TERMINATED BY "" "TO_TIMESTAMP_TZ(:ACCESS_TIME,'YYYY/MM/DD HH24:MI:SS:FF TZR')"

データファイルは

2012/11/12 15:18:00:765 CST

しかし、SQL*Loader を実行してデータをコミットすると、データベースの ACCESS_TIME がデータ ファイルと一致しません。

2012/11/13 05:18:00:765000000
4

2 に答える 2

0

行う:

select SESSIONTIMEZONE from dual;

データは中部標準時に挿入されます。データを選択すると、おそらくセッション(ローカル)タイムゾーンに表示されます。

于 2012-11-12T08:59:21.773 に答える
0

その動作が見られる場合、表の列はローカル タイム ゾーンのタイム スタンプである必要があり、シンガポールなどにいる場合 (gmt +8) 例:

SQL> alter session set time_zone='+08:00';

Session altered.

SQL> create table test (access_time timestamp with local time zone);

Table created.

SQL> host sqlldr test/test control=/tmp/load.ctl log=/tmp/load.log

SQL*Loader: Release 11.2.0.1.0 - Production on Mon Nov 12 13:26:14 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 2

SQL> select * from test;

ACCESS_TIME
---------------------------------------------------------------------------
13-NOV-12 05.18.00.765000

SQL> alter session set time_zone='-06:00';

Session altered.

SQL> select * from test;

ACCESS_TIME
---------------------------------------------------------------------------
12-NOV-12 15.18.00.765000

SQL> host cat /tmp/load.ctl
load data
 infile *
 replace
 into table test
 (  ACCESS_TIME terminated by "" "TO_TIMESTAMP_TZ(:ACCESS_TIME,'YYYY/MM/DD HH24:MI:SS:FF TZR')"
 )
begindata
2012/11/12 15:18:00:765 CST

CST 部分を保持して変換しない場合は、テーブルを TIMESTAMP WITH TIME ZONE として定義します。

SQL> create table test (access_time timestamp with time zone);

Table created.

SQL> host sqlldr test/test control=/tmp/load.ctl log=/tmp/load.log

SQL*Loader: Release 11.2.0.1.0 - Production on Mon Nov 12 13:27:56 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 2

SQL> select * from test;

ACCESS_TIME

---------------------------------------------------------------------------
12-NOV-12 15.18.00.765000 CST
于 2012-11-12T13:27:45.020 に答える