SQLローダーを使用してパイプ区切りファイルを読み込んでおり、入力しているテーブルのLAST_UPDATEDフィールドにデータを入力したいと考えています。私の制御ファイルは次のようになります。
LOAD DATA
INFILE SampleFile.dat
REPLACE
INTO TABLE contact
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
(
ID,
FIRST_NAME,
LAST_NAME,
EMAIL,
DEPARTMENT_ID,
LAST_UPDATED SYSTIMESTAMP
)
LAST_UPDATEDフィールドについて、SYSTIMESTAMPとCURRENT_TIMESTAMPを試しましたが、どちらも機能しませんでした。ただし、SYSDATEは問題なく機能しますが、時刻がわかりません。
私はSQLローダーを初めて使用するので、それが何であるか、または何ができないかについてはほとんど知りません。ありがとう。
以下を試しましたか?
CURRENT_TIMESTAMP [(精度)]
select current_timestamp(3)from dual; CURRENT_TIMESTAMP(3) ------------------ ----------- 10-JUL-04 19.11.12.686 +01:00
SQLLDRでこれを行うには、CTLファイルでEXPRESSIONを使用して、SQLLDRが呼び出しをSQLとして処理できるようにする必要があります。
交換:
LAST_UPDATED SYSTIMESTAMP
と:
LAST_UPDATED EXPRESSION "current_timestamp(3)"
最終的に彼が私が求めているものに答えたので、RCの答えを受け入れましたが、Oracleのツールのいくつかに不慣れだったため、これを必要以上に難しくしました。
SQL * Loaderに日付だけでなくタイムスタンプを記録させようとしていました。 SYSDATEを使用し、テーブルで選択を行ったとき、日付(05-AUG-09)のみがリストされていました。
次に、RCの方法(コメント内)を試しましたが、うまくいきました。しかし、それでも、テーブルで選択を行ったとき、同じ日付形式を取得しました。次に、表示のために残りを切り捨てているだけの可能性がありました。それで私はしました:
select TO_CHAR(LAST_UPDATED,'MMDDYYYY:HH24:MI:SS') from contact;
そして、それはすべてを表示しました。次に、制御ファイルに戻ってSYSDATEに戻し、同じクエリを実行しました。確かに、HH:MI:SSはそこにあり、正確でした。
これはすべてSqlDeveloperで行われています。なぜこの動作がデフォルトになるのかわかりません。また、私を驚かせたのは、sqldeveloperの次の2つのステートメントです。
SELECT CURRENT_TIMESTAMP FROM DUAL; //returns a full date and time
SELECT SYSDATE FROM DUAL; // returns only a date
SQL Developerで実行:ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'
そして、それをSELECT SYSDATE FROM DUALで確認します