insert into table1 (select * from table2);上面这种用法,在table1和table2表结构完全相同的情况下肯定没问题,但是我现在的两个表表结构几乎完全相同(字段名,字段个数和类型都相同),但是字段的顺序可能不同,这样便会出错如:
table1 (A,B,C)
table2 (A,C,B)由于表的具体字段名和个数是不知道的,但可以确定两个表结构式一致的,请问如何解决,谢谢!

解决方案 »

  1.   

    你先确定下表结构咯 
    然后再insert 
    例如表结构是这样
    table1 (A,B,C)
    table2 (A,C,B)
    你就可以按照这样的方式插入嘛
    insert into table1 select a,b,c from table2
      

  2.   


    表的具体字段名和个数是不知道的?那咋好对应呢?
    给你个建议,通过数据字典查出表的所有栏位有哪些,
    SELECT * FROM all_tab_cols WHERE table_name='TABLE1';
    然后查询语句中将所有栏位按顺序查询出来,再insert
    INSERT INTO table2(col1,col2,col3....) SELECT col1,col2,col3....FROM table1; 
      

  3.   

    感谢2位,但1楼没看清问题,我说了表的具体字段名和个数是不知道的2楼的办法是可以的,就是写起来有些费劲,我Oracle用的不是很熟,这个东西是要写在存储过程中的,能不能帮忙实现一下,或者谁有更简单点的办法,例如加个参数可以让导入时列名自动排序的小技巧 呵呵 谢谢了
      

  4.   

    不知道表的字段名和个数
    可以通过desc来看啊
    --例如查看emp表的字段,你可以分别看看两个表的结构,然后对应字段就可以了
    SQL> desc emp;
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ---------------
     EMPNO                                     NOT NULL NUMBER(4)
     ENAME                                              VARCHAR2(10)
     JOB                                                VARCHAR2(9)
     MGR                                                NUMBER(4)
     HIREDATE                                           DATE
     SAL                                                NUMBER(7,2)
     COMM                                               NUMBER(7,2)
     DEPTNO                                             NUMBER(2)
      

  5.   


    INSERT INTO table2(col1,col2,col3....) SELECT col1,col2,col3.... FROM table1;
    这个不复杂的,就是指定哪列导入到哪列。你仅仅insert只插入必填项不是也得指定列名么。
      

  6.   

    多谢楼上,可能还是我没说清楚,其实我要操作的是多个表的导入,是写在一个存储过程中的,例如:
    table_A1   到  table_A2
    table_B2   到  table_B2
    table_C3   到  table_C2
    ...
    表有多少是不一定的,是要遍历的,所有这种查看的方式是不行的。
    还请多出主意啊,谢谢。
      

  7.   


    desc tablename 便可知道表的类型以及个数
      

  8.   

    2楼的方法需要使用动态sql自己去拼sql.
      

  9.   

    只能拼sql了?没有更好一点的方法?
      

  10.   

    insert into table( A ) select  ( B) from   ,你在语句中让他们对应号不就完事了吗?如果类型一致,或者类型不一致,oracle能够自己转化的话,是没有问题的!