sqlldr复制某个表的问题

时间:2015-07-28 17:54:57

标签: oracle oracle10g sql-loader

我有4个表,我使用sqldr从一个模式复制到另一个模式。其中3个表没有给我任何问题,我能够成功地将它们全部复制出来。第四是我的问题出现的地方。我无法理解为什么,就数据类型或其他任何内容而言,第4个表没有什么特别之处。当我运行sqlldr命令时,所有行都以.bad文件结尾,并且没有任何行被复制。我将列出使用的代码以便更好地理解。

> pico deptbb02.csv
   UW PICO(tm) 4.10                                                     File: deptbb02.csv

10,infield,Jade,Clairmont,Lets play two
20,outfield,House of Pasta,Santee,Alea iacta est
30,pitcher,Crab Shack,Pacific Beach,Semper paratus
40,staff,Burger King,Lakeside,Experientia docet
50,catchers,Pinnacle Peak,Santee,Non Bastardi Carborundum

   UW PICO(tm) 4.10                                                     File: deptload.ctl

LOAD DATA
infile 'deptbb02.csv'
replace into table deptbb02
fields terminated by ','
(DEPTNO,DNAME,RESTAURANT,LOCATION,MOTTO)


> sqlldr username/password@database

control = deptload.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on Tue Jul 28 01:27:38 2015

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Commit point reached - logical record count 6

表deptbb02定义为......

SQL> desc deptbb02
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DEPTNO                                             NUMBER(3)
 DNAME                                              VARCHAR2(8)
 RESTAURANT                                         VARCHAR2(15)
 LOCATION                                           VARCHAR2(15)
 MOTTO                                              VARCHAR2(30)

我认为这应该是理解我的问题所需的一切,但不要犹豫,问我是否错过了什么。谢谢!

1 个答案:

答案 0 :(得分:0)

我怀疑数据在MOTTO列的末尾有空格或控制字符,或者您发布的样本数据与尝试加载.log文件的数据不同。即

Record 3: Rejected - Error on table DEPTBB02, column MOTTO. ORA-12899: value too large for column "ST101"."DEPTBB02"."MOTTO" (actual: 44, maximum: 30)

MOTTO列在表中定义为varchar2(30),但sqlldr看到44个字符。第3条记录显示的数据为14个字符。在可以显示控制字符和空格的编辑器中打开数据文件。

尝试在控制文件中的字段周围调用TRIM()以删除前导和尾随空格:

LOAD DATA
infile 'deptbb02.csv'
replace into table deptbb02
fields terminated by ','
(DEPTNO,
DNAME,
RESTAURANT,
LOCATION,
MOTTO    CHAR  "TRIM(:MOTTO)"
)