使用sqllder导csv文件内的数据到oracle,input.ctl控制文件内容如下:
=================================================================
LOAD DATA
INFILE 'C:\123.csv'
TRUNCATE INTO TABLE table
FIELDS TERMINATED BY ','
(BS_LEVEL,BS_COMPONENT)
=================================================================数据导入没有问题,但是导入以后数据的排列和csv文件里的不一样,发生错乱。如下例csv文件内
***********************************
0,abc
1,qwe
2,rrr
3,rrr
4,fff
5,ccc
6,ddd
***********************************但是导入到oracle以后,select出来的结果如下
***********************************
3,rrr
2,rrr
6,ddd
0,abc
4,fff
1,qwe
5,ccc
***********************************请各位高手指教,如何才能使表里的数据排列和csv文件里的行排列一样。多谢!

解决方案 »

  1.   

    oracle表中记录存储的先后次序是没意义的。你要输出指定的次序,在查询时加order by。
      

  2.   

    0-6只是举例,并是不是实际字段的数值,所以用order by无法排序,有没有办法在导入的时候加上sequence(自动增加的),但是主要是从csv导入到oracle的时候,可以按照这个顺序吗?我想,应该是修改控制文件,control.ctl。请指教!
      

  3.   

    在sqlldr时可以增加一个序号列,前提条件表要存在一个数值型的字段存放序号。
      

  4.   

    在控制文件中这样写
    FIELDS TERMINATED BY ','
    (BS_LEVEL,BS_COMPONENT,fieldname RECNUM)
      

  5.   

    To bobfang(匆匆过客):你的意思是在oracle的表里面要有一个类似ID的字段,然后在控制文件里面加上fieldname RECNUM。但是我在sqlldr里面报错说fieldname不存在数据库表里面?或者是我理解错了你的意思,请指教。多谢
      

  6.   

    我在数据库表里面增加了一个BS_ID NUMBER(6),我的控制文件修改成以下内容:
    ======================================================================
    LOAD DATA
    INFILE 'C:\123.csv'
    TRUNCATE INTO TABLE table
    FIELDS TERMINATED BY ','
    (BS_LEVEL,BS_COMPONENT,fieldname RECNUM)
    ======================================================================但是提示fieldname 不是数据库表的字段?
      

  7.   

    找到解决问题的办法了,table里面要增加一个字段BS_ID,
    还需要建立一个sequence,最后控制文件里修改如下:
    ===========================
    FIELDS TERMINATED BY ','
    (BS_LEVEL,BS_COMPONENT,BS_ID "PLCS_SEQUENCE_SAP_BOM.nextval")多谢