分类: 数据库开发技术
2012-08-18 10:20:13
系统环境:window2007
数据库环境:C:\oracle\ora90\network\ADMIN>sqlplus "/ as sysdba "
SQL*Plus: Release 9.0.1.0.1 - Production on 星期二 8月 7 15:44:36 2012
(c) Copyright 2001 Oracle Corporation. All rights reserved.
连接到:
Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production
With the Partitioning option
JServer Release 9.0.1.1.1 - Production
SQL>
二、实验过程:1、用户:scott/tiger
2、控制文件dept_02.ctl
LOAD DATA
INFILE *
INTO TABLE DEPT_02
FIELDS TERMINATED BY ','
(DEPTNO,DNAME,LOC )
BEGINDATA
12,Sales,Virginia
22,Accounting,Virginia
32,Consulting,Virginia
42,Finance,Virginia
3、表:
SQL> create table dept_02(deptno number(2) primary key,
2 daname varchar2(8),
3 loc varchar2(13));
表已创建。
SQL> desc dept_02
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
DEPTNO NOT NULL NUMBER(2)
DANAME VARCHAR2(8)
LOC VARCHAR2(13)
导入数据:
C:\oracle\control>sqlldr userid=scott/tiger control=dept_02.ctl
SQL*Loader: Release 9.0.1.1.1 - Production on 星期三 8月 8 09:33:00 2012
(c) Copyright 2001 Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数4
查看表:
SQL> SELECT * FROM DEPT_02;
DEPTNO DANAME LOC
---------- -------- -------------
12 Sales Virginia
42 Finance Virginia
只有2条数据进来了。
二、报错情况:查看log:
记录 2: 被拒绝 - 表 DEPT_02 出现错误。
ORA-01401: 插入的值对于列过大
记录 3: 被拒绝 - 表 DEPT_02 出现错误。
ORA-01401: 插入的值对于列过大
表DEPT_02:
2 行加载成功
由于数据错误, 2 行没有加载。
由于所有 WHEN 子句失败, 0 行没有加载。
由于所有字段都为空的, 0 行没有加载。
原因:
DANAME VARCHAR2(8)
但是2,3条数据超过了它的长度限制,因此报错。
三、解决方法:改表
调整相应字段大小:
SQL> ALTER TABLE DEPT_02 MODIFY DANAME VARCHAR2(15);
表已更改。
清空表数据:
SQL> TRUNCATE TABLE DEPT_02;
表已截掉。
再次导入数据:
C:\oracle\control>sqlldr userid=scott/tiger control=dept_02.ctl
SQL*Loader: Release 9.0.1.1.1 - Production on 星期三 8月 8 09:44:57 2012
(c) Copyright 2001 Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数4
查看表:
SQL> SELECT * FROM DEPT_01;
DEPTNO DANAME LOC
---------- -------------- -------------
10 Sales Virginia
20 Accounting Virginia
30 Consulting Virginia
40 Finance Virginia
查看log:
表DEPT_02:
4 行加载成功
由于数据错误, 0 行没有加载。
由于所有 WHEN 子句失败, 0 行没有加载。
由于所有字段都为空的, 0 行没有加载。
有的时候看要插入的数据,当数据超过默认char(255),还要改控制文件
控制文件:
LOAD DATA
INFILE *
INTO TABLE DEPT_02
FIELDS TERMINATED BY ','
(DEPTNO,DNAME char(1000), LOC )
--只认char
BEGINDATA
12,Sales,Virginia
22,Accounting,Virginia
32,Consulting,Virginia
42,Finance,Virginia
在从新导入即可。加油!!!