在日常工作中,我们经常需要用SQLLDR导入数据,而实际情况是我们很多表中的受理字段或部分键值是通过SEQUENCE来实现的。那么如何在使用SQLLDR中应用sequence呢。
本文通过一个DEMO来示例一下。
J r X k5P6H o.G K @0
    SQL> create table test
    
    1y+v b!| ^5e L _0D02 (ITPUB个人空间 v6c'J0q G;[ t J ] X
    
    3 recoid number(14), 
    
    4V(Y ? W0y+C04 area_id     char(3), ITPUB个人空间 K K3p b e Q
    
    5  area_name    varchar2(20),
    
     l P-b"u @ Y m Z:f n06  bill_month   number(6),ITPUB个人空间 C"k M R:y R9L/}#A*^ T l U
    
    7 fee number(10,2)
    
     q a L s x-b P-n ~08 );
  
    表已创建。ITPUB个人空间 w i } @ l.l Y4@8i
    
    ITPUB个人空间 M |0F8N:} [,~9h7Y
    
    SQL> create sequence test_seq start with 1 increment by 1 order;
  
序列已创建。
SQL>
    
     I e Q w H;_#T8G0先做好数据文件:test.txtITPUB个人空间2U { U n(H(n M
    
    530,HZ,200501,100.01ITPUB个人空间'B V8e c!D:A
    
    530,HZ,200502,800.23ITPUB个人空间 W l1o/N D y
    
    531,JN,200501,5000.81
    
     T!J(v x v8K u A V u z0531,JN,200502,5360.00ITPUB个人空间5F4~&^ _0F:x
    
    532,QD,200501,20670.32ITPUB个人空间 ^ i @ C;C n \5F,|
    
    532,QD,200502,22000.08
    
    )a4Z u/C e0533,ZB,200501,3050.56ITPUB个人空间 o.{ X7f u'Q
    
    533,ZB,200502,3108.14
  
大家注意到了吧,数据文件中比表结构里少了一列!而这一列,我们计划用sequence来实现
下面是控制文件的内容:test.ctl
    load data         ITPUB个人空间"l i q.l k ` j&k T4G
    
    infile 'e:test.txt'   
    
    ;D&[ t4e0p u v;Q ~4f P0append into table test  
    
    *l6h f%p)T @-I8b(G9^0fields terminated by "," optionally enclosed by '.'ITPUB个人空间 f c Y e$~'E"s O
    
    (recoid sequence(1,1),ITPUB个人空间-n o d m1\
    
    area_id,
    
    ;w B5{+c.N R&H0area_name,
    
    .q4^ q5q u.t9t0bill_month,
    
     u s-x I `*o0fee)
  
    ITPUB个人空间 ? w \ z*i$t
    
    因为序列是刚刚建好的,所以我们从1开始,步长也为1
  
    下面测试一下:ITPUB个人空间 } o r5\ p
    
    SQL> select * from test;
  
未选定行
SQL>
    在CMD模式下,用SQLLDR按照上面的控制文件,将上面的数据文件导入:
    
     _ a | U7z _'X%V0E:>sqlldr userid=study/study control=test.ctl
  
SQL*Loader: Release 10.2.0.1.0 - Production on 星期六 6月 17 09:51:10 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
    达到提交点 - 逻辑记录计数 7ITPUB个人空间 f!` r9v/L A a
    
    达到提交点 - 逻辑记录计数 8
  
    下面返回数据库看看,数据是否象我们预料的那样进去了!
    
     f2x Z7E*y)]7Z#U-z P0SQL> select * from test;
  
    RECOID ARE AREA_NAME BILL_MONTH FEE
    
    4K @3z @:G0---------- --- -------------------- ---------- ----------ITPUB个人空间*e j u#a O n o y X
    
    1 530 HZ 200501 100.01ITPUB个人空间&]6N d h Z E+t,q p e
    
    2 530 HZ 200502 800.23
    
     {'h v B0C#Z4u3D03 531 JN 200501 5000.81ITPUB个人空间 R i-^ o D P9V m
    
    4 531 JN 200502 5360
    
    3l X3{ N;R ] n%w05 532 QD 200501 20670.32ITPUB个人空间 y1C7i \*d F/^
    
    6 532 QD 200502 22000.08ITPUB个人空间 c z p%X6G.F!R
    
    7 533 ZB 200501 3050.56ITPUB个人空间.x n!? | @ @
    
    8 533 ZB 200502 3108.14
  
已选择8行。
SQL>


 
					 
					