2014-08-29 149 views
1

我在Oracle 11g中有一个表我试图用SQLLDR加载。此表应包含在此行中的数据库创建存储创建日期一栏:SQLLDR:缺省值未填写的列

... 
ORACLE_ROW_CREATE TIMESTAMP(6) DEFAULT SYSTIMESTAMP 
... 

我的控制文件是这样的:在加载完成的ORACLE_ROW_CREATE列

INTO TABLE rrdbo.IBXR_STAGE_0000 
WHEN (12-26) <> 'IBXRBASELINE ' AND (30-47) <> BLANKS 
    (
    CLIENT_GROUP_ID POSITION(1:10) 
    , PORTAL_ID POSITION(11:20) 
    , ACCOUNT_BRANCH_ID POSITION(21:23) 
    , ACCOUNT_BASE_ID POSITION(24:29) 
    , RELATIONSHIP_TYPE_CD POSITION(30) 
    , CLIENT_ID POSITION(31:40) 
    , CLIENT_SEGMENT_ID POSITION(41:45) DECIMAL EXTERNAL 
    , TOA_IND POSITION(46) 
    , LINK_TYPE_CD POSITION(47) 
    , LST_UPD_TMST POSITION(48:67) TIMESTAMP "YYYYMMDDHH24MISSFF6" 
    , LST_UPD_PRCS_ID POSITION(68:77) 
    , LST_UPD_ID POSITION(78:87) 
    , MULTI_COMPANY_NUM CONSTANT "0000" 
    ) 

后没有价值。如何在不设置DIRECT = FALSE的情况下提供此值?

回答

3

你可以使用SYSDATE

, ORACLE_ROW_CREATE SYSDATE 

但是你会失去精确到毫秒。所以,更有效地在你的情况,YOUE可以使用EXPRESSION拿起栏默认:

, ORACLE_ROW_CREATE EXPRESSION "DEFAULT" 

文档明确地说:

在常规路径模式和直接路径模式,以表达参数用于将缺省值加载到列名中

...因此它不会被忽略,因为它通常用于直接路径加载。 (虽然我从来没有真正使用过这个,所以我希望文档是正确的...)

+0

这工作表示感谢。 – 2014-09-02 13:28:09