我在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的情况下提供此值?
答案 0 :(得分:3)
您可以使用SYSDATE:
, ORACLE_ROW_CREATE SYSDATE
但是你会失去毫秒精度。在您的情况下更有用,您可以使用EXPRESSION
来获取列默认值:
, ORACLE_ROW_CREATE EXPRESSION "DEFAULT"
文档明确说:
在常规路径模式和直接路径模式下,EXPRESSION参数可用于将默认值加载到column_name
...因此它不会被忽略,因为它通常用于直接路径加载。 (虽然我从来没有真正使用过这个,所以我希望文档是正确的......)