当前位置:数据库 > Oracle >>

[Oracle] SQL*Loader详细使用教程(5)- 典型例子

[Oracle] SQL*Loader详细使用教程(5)- 典型例子
 
[Oracle] SQL*Loader详细使用教程(4)- 字段列表
http://www.zzzyk.com/database/201308/238182.html
 
本文介绍SQL*Loader在实际使用过程中经常用到的典型例子。
 
1. 表中的列比数据文件的列要少怎么办?
假设一个csv的文件如下:
[plain] 
a1,a2,a3,a4  
b1,b2,b3,b4  
c1,c2,c3,c4  
d1,d2,d3,d4  
总共4列,先要求只要第2、3列数据,怎么办呢?这时候,FILLER(注意:不是FILTER)参数派上用场了,控制文件如下所示:
[plain] 
load data  
infile 'data.csv' "str '\r\n'"  
into table test.test  
append  
fields terminated by ','  
(  
  col1 filler,  
  column01_name,  
  column02_name  
)  

 

从上面的控制文件我们注意到在第一列col1后面有filler标识,表示将不读取第1列的数据;细心的读者可能发现了我们并没有给第4列加上filler标识,这是因为sqlldr默认跳过剩下的数据,当然如果你写上col4 filler也是可以的。
 
2. 如何自动生成sequence?
sqlldr无法使用数据库里的sequence赋值,只能使用其自带的sequence语句,这点确实很不方便。
因此维护原本的sequence,需要以下步骤:
1)首先获得表上sequence的当前值:
[sql] 
SYS@TEST16> select LAST_NUMBER from dba_sequences where sequence_name='SEQ_ORDER';  
  
LAST_NUMBER  
-----------  
    5410405  

 

2)在sqlldr的控制文件里,以上一步获得的值为sequence的开始值,如下所示:
id SEQUENCE(5410405,1) 
3)数据加载完毕后,用select语句获得id的最大值
4)重建数据库的sequence,把初始值设为上一步获得的id最大值+1
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,