0

CSV ファイルに日付が含まれていないクライアントがいます。各行がいつ Oracle 11g データベースにロードされるかを示すタイムスタンプが必要です。CSV ファイルはベンダーから提供されているため、ファイルを変更できません。デフォルトの列値と「挿入後」トリガーを追加しようとしましたが、うまくいきませんでした。(これは時間外のプロセスであるため、パフォーマンスは問題ではありません)。

制御ファイルは次のようになります。

options (skip=1, direct=true, rows=10000)
load data
 infile data.dat
badfile sqldatatxtdata.bad
replace
     into table LAM.CSV_DATA_TXT
fields terminated by ','
trailing nullcols
(ASSET, ASSET_CLASS, MATURITY, PRICE)

テーブルは次のようになります。

create table LAM.CSV_DATA_TXT  (
ASSET   VARCHAR2(20),
ASSET_CLASS   VARCHAR2(50),
MATURITY  varchar2(50),
PRICE  NUMBER(12,8),
DATE_TIMESTAMP DATE default(SYSTIMESTAMP) 

他のアイデアはありますか?ありがとう。

4

1 に答える 1

0

SYSTIMESTAMP のデフォルト値を持つ TIMESTAMP カラムを追加すると、うまくいくはずです:

SQL> create table t23
  2  ( id number not null
  3      , ts timestamp default systimestamp not null)
  4  /

Table created.

SQL> insert into t23 (id) values (9999)
  2  /

1 row created.

SQL> select * from t23
  2  /

        ID  TS
----------  ------------------------- 
      9999  25-APR-11 15.21.01.495000


SQL>

したがって、あなたのケースでなぜそれが機能しないのかをより詳細に説明する必要があります。


あなたの例では、列を DATE データ型として作成したことに注意してください。これは、デフォルトの SYSTIMESTAMP を最も近い秒に切り捨てることを意味します。タイムスタンプ値が必要な場合は、TIMESTAMP データ型を使用する必要があります。

于 2011-04-25T14:23:25.183 に答える