如何填充时间戳字段使用Oracle SQL加载当前时间戳(How to populate a tim

2019-09-22 05:55发布

我在读与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装载机所以我真的很少知道它是什么或不能够。 谢谢。

Answer 1:

你有没有试过如下:

CURRENT_TIMESTAMP [(精度)]

select current_timestamp(3) from dual;

CURRENT_TIMESTAMP(3)
-----------------------------
10-JUL-04 19.11.12.686 +01:00

要在SQLLDR做到这一点,你需要使用表达式在CTL文件,以便SQLLDR知道对待呼叫作为SQL。

更换:

LAST_UPDATED SYSTIMESTAMP

有:

LAST_UPDATED EXPRESSION "current_timestamp(3)"


Answer 2:

我接受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两个语句。

SELECT CURRENT_TIMESTAMP FROM DUAL; //returns a full date and time 

SELECT SYSDATE FROM DUAL; // returns only a date


Answer 3:

在SQL Developer中运行:ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'

然后用SELECT SYSDATE FROM DUAL检查



文章来源: How to populate a timestamp field with current timestamp using Oracle Sql Loader