如何使用Oracle Sql Loader使用当前时间戳填充时间戳字段

时间:2009-08-05 13:26:14

标签: oracle sql-loader

我正在使用SQL Loader读取管道分隔文件,并希望在我填充的表中填充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的新手,所以我对它是什么或不具备什么知之甚少。感谢。

4 个答案:

答案 0 :(得分:12)

您是否尝试过以下操作:

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)"

答案 1 :(得分:3)

我接受了RC的回答,因为最终他回答了我的要求,但是我对甲骨文的一些工具的不熟悉使我更难以实现这一点。

我试图让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

答案 2 :(得分:0)

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

然后检查它 SELECT SYSDATE FROM DUAL

答案 3 :(得分:0)

如果你想使用表定义的默认值,你可以使用:

ROWDATE EXPRESSION "DEFAULT"