SQL * Loader控制文件中的几列是空白的

时间:2015-04-30 12:29:49

标签: sql-loader controlfile

我的文件名.dat文件包含以下格式的1000条记录。

SIC_ID|NAME|CHANGED_DATE|LOGICALLY_DELETED
110|Wheat|31/10/2010 29:46:00|N

我想要提供内容的表格中有更多列。我希望将这些列留空,因为.dat文件中没有内容。 表格列:

SIC_ID, NAME, CREATED_USER_ID ,CREATED_DATE ,CHANGED_USER_ID ,CHANGED_DATE,LOGICALLY_DELETED,RECORD_VERSION

我的控制文件如下: -

    OPTIONS (DIRECT=TRUE,SKIP=1)
    LOAD DATA CHARACTERSET WE8MSWIN1252
    INFILE "mic_file.dat"
    BADFILE "sql/mic_file.bad"
    REPLACE
    INTO TABLE SDS_SIC
    FIELDS TERMINATED BY "|"
    TRAILING NULLCOLS
    (SIC_ID, NAME,
DATE "DD/MM/YYYY HH24:MI:SS" NULLIF (CHANGED_DATE=BLANKS),
LOGICALLY_DELETED)

运行SQL * Loader后,我看到以下错误:

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
SIC_ID                              FIRST     *   |       CHARACTER
NAME                                 NEXT     *   |       CHARACTER
CHANGED_DATE                         NEXT     *   |       CHARACTER
LOGICALLY_DELETED                    NEXT     *   |       CHARACTER

Record 1: Rejected - Error on table SDS_SIC, column CHANGED_DATE.
ORA-26041: DATETIME/INTERVAL datatype conversion error

最后两行错误被抛出多次。现在已修复:)

错误2:LOGICALLY_DELETED只有两个可能的值 - Y或N。

Record 51: Rejected - Error on table SDS_SIC, column LOGICALLY_DELETED.
ORA-12899: value too large for column LOGICALLY_DELETED (actual: 2, maximum: 1)

多次显示以上错误。

2 个答案:

答案 0 :(得分:2)

请记住,控制文件列列表位于数据文件中的顺序字段中。数据按名称与表列匹配。您的控制文件将第3和第4个字段映射到FILLER,这就是它们为空的原因。 FILLER仅适用于您不想要的数据文件中的字段。

只有在列列表部分中才需要这样的东西,TRAILING NULLCOLS将处理表格的其余列:

(SIC_ID, 
 NAME, 
 CHANGED_DATE  DATE "DD/MM/YYYY HH24:MI:SS" NULLIF (CHANGED_DATE=BLANKS),
 LOGICALLY_DELETED
)

通过举例:Skipping data fields while loading delimited data using SQLLDR

,查看最近发布的描述关系的帖子

答案 1 :(得分:0)

您可以转到MySQL命令行客户端,并将值插入所需的列,您应该执行以下操作: 就像你想将值插入

一样
  

SIC_ID | NAME | CHANGED_DATE | LOGICALLY_ DELETED

而不是那些额外的专栏。你应该输入:

insert into 'whatever the table name is'(SIC_ID,NAME,CHANGED_DATE,LOGICALLY_DELETED)
values(112,'wheat','31/10/2010 19:46:00',N);

仅在您已获取列的属性varchar的位置使用单个引号 试试吧....它会工作