我的文件名.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)
多次显示以上错误。
答案 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的位置使用单个引号 试试吧....它会工作