14

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 Loader を初めて使用するので、SQL Loader でできることとできないことについてほとんど知りません。ありがとう。

4

4 に答える 4

12

次のことを試しましたか?

CURRENT_TIMESTAMP [(精度)]

デュアルからcurrent_timestamp(3)を選択します。

CURRENT_TIMESTAMP(3)
-----------------------------
2004年7月10日19.11.12.686+01:00

SQLLDRでこれを行うには、CTLファイルでEXPRESSIONを使用して、SQLLDRが呼び出しをSQLとして処理することを認識できるようにする必要があります。

交換:

LAST_UPDATED SYSTIMESTAMP

と:

LAST_UPDATED EXPRESSION "current_timestamp(3)"
于 2009-08-05T13:30:57.720 に答える
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
于 2009-08-05T14:15:58.537 に答える
0

テーブル定義のデフォルトを使用する場合は、次を使用できます。

ROWDATE EXPRESSION "DEFAULT"
于 2021-05-03T12:44:22.543 に答える
-1

Sql Developer の実行: ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'

次に、SELECT SYSDATE FROM DUALで確認します

于 2014-11-26T17:45:02.787 に答える