table1:
产品id 产品颜色 产品型号 是否智能
1111 red t1 是
1112 blue t2 否
1113 green t3 是
table2:
产品id 参数名称 参数值
1111 产品颜色 red
1112 产品颜色 blue
1113 产品颜色 green
1111 产品型号 t1
1112 产品型号 t2
1113 产品型号 t3
1111 是否智能 是
1112 是否智能 否
1113 是否智能 是 将横表table1插入纵表table2,效果如table2,有人给我脚本如下:
select 产品id,'产品颜色' 参数名称,产品颜色 参数值 from table
union all  
select 产品id,'产品型号',产品型号 参数值 from table
union all  
select 产品id,'是否智能',是否智能 参数值 from table
问题似乎解决,但难过的是我的table1有400多列,不可能union all 400多个select吧很急,哪位大侠能给个解决方案,在线等哦

解决方案 »

  1.   

    部门内部调整,没心思写代码了,写个思路,试试看行不行。
    /*
    思路:
    从系统字段表中获取字段名称列表
      SELECT * FROM USER_TAB_COLUMNS
      WHERE TABLE_NAME = 'TABLENAME'
    动态生成SQL语句
      strCursorSql varchar2(32700) := '';
      --游标相关
      TYPE myref IS REF CURSOR;
      cur      myref;
      strCursorSql := 'select * from TABLENAME';
      OPEN cur FOR strCursorSql;
      LOOP
      Fetch cur into secondFieldValue;
        Exit when cur%notfound;
      dbms_output.put_line('INSERT INTO TABLE2 SELECT...' );
      END LOOP;  
    循环插入相应数据
      执行生成的INSERT语句
    */
      

  2.   

    楼主可以试下这个
    http://blog.csdn.net/lithor/article/details/7728778
      

  3.   

    已按楼主要求完成测试,楼主可以看看是否符合你的意思。
    http://blog.csdn.net/lithor/article/details/7728778
      

  4.   

    受到hupeng213启发,写游标,目前已解决,分享如下:
    CREATE OR REPLACE PROCEDURE procedure_goods is
      v_sql varchar2(2000);
      cursor par_name_cur is
        select par_alias,par_sn,bas_column from tb_ttp_industry_parameters;
      row_data  par_name_cur%rowtype;
      par_value varchar2(100);
      par_sn varchar2(100);
      par_alias varchar2(100);
    begin
      for row_data in par_name_cur loop
        par_value := row_data.bas_column;
        par_sn := row_data.par_sn;
        par_alias := row_data.par_alias;
        v_sql     := 'insert into tb_ttp_goods_parameters(ind_id,good_id,par_sn,par_alias,par_value) select 158,pro_id,:1,:2,'|| par_value|| ' from bas_dev_info_group';
        execute immediate v_sql using par_sn,par_alias;
        dbms_output.put_line(v_sql);      
      end loop;
    end;