2009-08-05 45 views
14

使用当前时间戳填充时间戳字段我正在使用SQL Loader读取管道分隔文件,并希望在我填充的表中填充LAST_UPDATED字段。我的控制文件看起来是这样的:如何使用Oracle Sql Loader

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的新成员,所以我对于它的功能和功能都知之甚少。谢谢。

回答

12

你有没有试过如下:

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

仍然没有按”不喜欢它。给我这个错误: SQL * Loader-350:第17行的语法错误。 期待“,”或“)”,找到“CURRENT_TIMESTAMP”。 LAST_UPDATED CURRENT_TIMESTAMP(3) – Sen 2009-08-05 13:34:08

+0

你能尝试做: LAST_UPDATED表达 “SELECT CURRENT_TIMESTAMP(3)从双” OR LAST_UPDATED表达 “CURRENT_TIMESTAMP(3)” – 2009-08-05 13:47:44

+0

呵呵,还行,就是伟大工程:LAST_UPDATED表达“CURRENT_TIMESTAMP( 3)“,选择双重选项没有出于某种原因。但是,事实证明,SYSDATE可以正常工作。我会在一个答案中解释。 – Sen 2009-08-05 14:06:27

3

我接受RC的答案,因为最终他回答了我的要求,但我的一些Oracle的工具不熟悉导致我作出这个更困难比它需要的要多。

我试图让SQL * Loader记录一个时间戳而不是一个日期。当我使用SYSDATE,然后在表上进行选择时,它只列出了日期(05年8月5日)。

然后,我试着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 
+4

SYSDATE返回DATE数据类型(但包含小时分钟和秒)。 CURRENT_TIMESTAMP返回一个TIMESTAMP数据类型,该数据类型下降到小数秒(http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements001.htm#i53219)。 这两个都有内部表示(例如DATE保持为7个字节),客户端选择如何显示它们。 – 2009-08-05 22:57:41

0

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

,然后用 SELECT SYSDATE检查FROM DUAL

+0

这是行不通的 - 你根本没有改变日期,你正在改变一个_different_会话。 – Ben 2014-11-26 18:04:36