CREATE TABLE TABLETEMP(
     a number(5),
     a number(5),
     b number(3)
);
若有一些数据文件需要导入这个表:
1 1001 2,8,11,106
23 105 3,8,9
(每列通过Tab按键区分)
希望能够得到如下数据结构
a b c
------------------------
1 1001 2
1 1001 8
1 1001 11
1 1001 106
23 105 3
23 105 8
23 105 9
请问高手该如何写CTL文件啊?

解决方案 »

  1.   

    建议用toad或PB直接导入,无须这么麻烦.
      

  2.   

    你把这些数据导入到一张临时表里TABLE_A。
    A1  A2   A3  A4 A5 A6
    1   1001  2, 8, 11,106
    23  105   3, 8, 9
    SELECT A1,A2,A3 FROM TABLE_A WHERE A3 IS NOT NULL
    UNION
    SELECT A1,A2,A4 FROM TABLE_A WHERE A4 IS NOT NULL
    UNION
    SELECT A1,A2,A5 FROM TABLE_A WHERE A5 IS NOT NULL
    ;把这个结果集插入数据库就可以了。
      

  3.   

    改控制文件的格式比改Data文件的格式更煩。
      

  4.   

    有没有更好的办法,用union的话,字段太多就。
      

  5.   

    你把这些数据导入到一张临时表里TABLE_A。
    A1   A2   A3  
    1   1001  2, 8, 11,106
    23   105  3, 8, 9
    然手根据行转列就可以了
    例子:
    create table t_test (A1 varchar2(200),A2 varchar2(200),A3 varchar2(200));insert into t_test values ('1','1001','2,8,11,106');
    insert into t_test values ('23','105','3,8,9');
    SELECT A1,A2
          ,REGEXP_SUBSTR(A3,'[^,]+',1,l) AS NAME
      FROM t_test
          ,(SELECT LEVEL l FROM DUAL CONNECT BY LEVEL<=100)
    WHERE l <=LENGTH(A3) - LENGTH(REPLACE(A3,','))+1
    ORDER BY 1,2,3;把这个结果集插入数据库就可以了。