SQL*Loader控制文件几列为空白
SQL*Loader control file few columns are blank
我的文件名 .dat 文件包含以下格式的 1000 条记录。
SIC_ID|NAME|CHANGED_DATE|LOGICALLY_DELETED
110|Wheat|31/10/2010 29:46:00|N
Table 我想在其中提供内容的列数很少。我希望将这些列留空,因为 .dat 文件中没有内容。
Table 列:
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 只有 2 个可能的值 - 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)
多次显示以上错误。
您可以转到 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 的地方使用单引号
试一试......它会工作
请记住,控制文件列列表位于数据文件中的订单字段中。数据按名称与 table 列匹配。您的控制文件将第 3 和第 4 个字段映射到 FILLER,这就是它们为空的原因。 FILLER 仅适用于您不需要的数据文件中的字段。
您只需要在您的列列表部分中使用类似的内容,TRAILING NULLCOLS 将处理 table:
的其余列
(SIC_ID,
NAME,
CHANGED_DATE DATE "DD/MM/YYYY HH24:MI:SS" NULLIF (CHANGED_DATE=BLANKS),
LOGICALLY_DELETED
)
看到最近的这个post正好举例说明关系:
我的文件名 .dat 文件包含以下格式的 1000 条记录。
SIC_ID|NAME|CHANGED_DATE|LOGICALLY_DELETED
110|Wheat|31/10/2010 29:46:00|N
Table 我想在其中提供内容的列数很少。我希望将这些列留空,因为 .dat 文件中没有内容。 Table 列:
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 只有 2 个可能的值 - 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)
多次显示以上错误。
您可以转到 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 的地方使用单引号 试一试......它会工作
请记住,控制文件列列表位于数据文件中的订单字段中。数据按名称与 table 列匹配。您的控制文件将第 3 和第 4 个字段映射到 FILLER,这就是它们为空的原因。 FILLER 仅适用于您不需要的数据文件中的字段。
您只需要在您的列列表部分中使用类似的内容,TRAILING NULLCOLS 将处理 table:
的其余列(SIC_ID,
NAME,
CHANGED_DATE DATE "DD/MM/YYYY HH24:MI:SS" NULLIF (CHANGED_DATE=BLANKS),
LOGICALLY_DELETED
)
看到最近的这个post正好举例说明关系: