SQLLDR:未填充默认值的列

时间:2014-08-29 14:24:00

标签: oracle oracle11g sql-loader

我在Oracle 11g中有一个表我正在尝试使用SQLLDR加载。此表的列应包含创建日期,该日期存储在数据库中创建此行的时间:

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

我的控制文件如下所示:

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

加载完成后,ORACLE_ROW_CREATE列没有值。如何在不设置DIRECT = FALSE的情况下提供此值?

1 个答案:

答案 0 :(得分:3)

您可以使用SYSDATE

   , ORACLE_ROW_CREATE SYSDATE

但是你会失去毫秒精度。在您的情况下更有用,您可以使用EXPRESSION来获取列默认值:

   , ORACLE_ROW_CREATE EXPRESSION "DEFAULT"

文档明确说:

  

在常规路径模式和直接路径模式下,EXPRESSION参数可用于将默认值加载到column_name

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