sqlldr要导入的数据文件比表中的列多怎么办?
建立了一个表bonus有三列,数据文件有五列,导入数据文件的数据到表中怎么导入??谢谢

解决方案 »

  1.   

    比如,数据文件如下(同样是基于只做演示的目的,这里三思就不真的提供几百兆甚至上千兆的数据了,不然出版社非把我活吞了不可):SMITH   7369    CLERK       800     20  ALLEN   7499    SALESMAN    1600    30  WARD    7521    SALESMAN    1250    30  JONES   7566    MANAGER     2975    20  MARTIN  7654    SALESMAN    1250    30  BLAKE   7698    MANAGER     2850    30  CLARK   7782    MANAGER     2450    10  KING    7839    PRESIDENT   5000    10  TURNER  7844    SALESMAN    1500    30  JAMES   7900    CLERK       950     30  FORD    7902    ANALYST     3000    20  MILLER  7934    CLERK       1300    10 示例代码保存为数据文件ldr_case6.dat。我们希望导入第1、3、4列而跳过2、5两列(注意这里指的不是字符列),创建控制文件如下:LOAD DATA  INFILE ldr_case6.dat  TRUNCATE INTO TABLE BONUS  (  ENAME position(1:6),  TCOL FILLER position(8:11),  JOB position(13:21),  SAL position(23:26)  ) 示例代码保存为控制文件ldr_case6.ctl。SQLLDR的控制文件中对列定义时支持FILLER关键字,可以用来指定过滤列,在上述控制文件中,我们就使用该关键字来过滤列,相当于第8到第11列之间的数据不导入。事实上由于此处为定长字串,我们在控制文件中指定的position参数,已经限定了读取的内容,你甚至可以删除控制文件中TCOL FILLER position(8:11)那行。 执行SQLLDR命令:F:\oracle\script>SQLLDR SCOTT/TIGER CONTROL=LDR_CASE6.CTL  SQL*Loader: Release 10.2.0.1.0 - Production on   星期三 3月 11 23:13:33 2009  Copyright (c) 1982, 2005, Oracle.  All rights reserved.  达到提交点 - 逻辑记录计数 11  达到提交点 - 逻辑记录计数 12 SQL*Plus中查看导入结果:SQL> SELECT * FROM BONUS;  ENAME       JOB              SAL    COMM  ----------  ---------   ---------   ----------  SMITH       CLERK            800  ALLEN       SALESMAN        1600  WARD        SALESMAN        1250  JONES       MANAGER         2975  MARTIN      SALESMAN        1250  BLAKE       MANAGER         2850  CLARK       MANAGER         2450  KING        PRESIDENT       5000  TURNER      SALESMAN        1500  JAMES       CLERK            950  FORD        ANALYST         3000  MILLER      CLERK           1300 
      

  2.   

    复制粘贴过来后,看起来有些乱了。
    进下面这个网页吧,上面很详细,也很清晰。
    http://book.51cto.com/art/200912/170011.htm
      

  3.   

    sqlldr的控制文件,可以选择要导入的列。
      

  4.   

    如果数据文件的列比要导入的表的列少,处理的时候可能麻烦些,多了反倒更加简单哦,一般有两种方法: 
    其一,修改数据文件,将多余的数据删除,不过这种方式,小数据量可行,但要是几百兆甚至上千上万呢?,这时,我们就要看其二咯。
    其二,在控制文件中使用关键字FILLER,指定过滤列。(变长格式必须指定FILLER,不然列植就有可能不对应,但若是定长可以不用的,因为我们在指定的position参数时已经限定了读取的内容)