Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2896072
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2011-08-23 16:40:00

同事的需求,描述的比较别扭,大体意思如下:

SQL> DESC TEST;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 CHAR(1)
 COL1                                               VARCHAR2(4)
 COL2                                               VARCHAR2(4)
 
ID,COL1,COL2
1,A,1
2,B,2
3,C,3
4,D,4
5,F,5
 
数据文件中的这3个列的值对应表的列。
当ID=5的时候, 第一列导入ID,第二列导入COL1,第三列导入COL2
当ID<>5的时候,第一列导入ID,第二列导入COL2,第三列导入COL1
 
 
 
实现如下:
 
 
SQL> HOST TYPE DATA.CTL
LOAD DATA
INFILE 'c:\data.txt'
 

APPEND INTO TABLE TEST
WHEN ID='5'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(ID ,COL1,COL2)

INTO TABLE TEST
WHEN ID<>'5'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(ID POSITION(1),COL2,COL1) --这个地方必须带上POSITION(1),否则只能导入到第一个表中
 
SQL> HOST TYPE DATA.TXT
1,A,1
2,B,2
3,C,3
4,D,4
5,F,5

SQL> host sqlldr test/test control=c:\data.ctl
 
SQL*Loader: Release 10.2.0.1.0 - Production on 星期二 8月 23 16:30:36 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
达到提交点 - 逻辑记录计数 4
达到提交点 - 逻辑记录计数 5
 
SQL> SELECT * FROM TEST;
 
I COL1 COL2
- ---- ----
1 1    A
2 2    B
3 3    C
4 4    D
5 F    5
SQL>
阅读(1600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~