表A
id name type
1 思想素质 上级 3
2 人格素质 上级 4
3 思想素质 上级 5
4 战略素质 下级 8
5 人格素质 同级 9
6 思想素质 同级 2
7 战略素质 上级 3
将表A中的数据导入到表B中来
表B
ID name Type1 Mark1 Type2 Mark2 Type3 Mark3
1 思想素质 上级 3 上级 5 同级 2这表表一共有20个type字段和字段,就是因为每一个name的上级可能有多个,下级也可能有多个,比如思想素质有4个上级,那么type1  1  ……..type4  4都要存上级
然后type5 5后依次存放同级。下级依次类推
然后这个表的第二条记录就是:战略素质。。跟上面一样的需求••这个该如何实现呀?

解决方案 »

  1.   

    create procedure ... is
     v_sql1 varchar2(1000);
     v_sql2 varchar2(1000);
     i integer;
    begin
     for c1 in (select min(id) id, name from A group by name order by id)
     loop
      v_sql1 := 'ID,name';
      v_sql2 := c1.id||','''||c1.name||'''';
      i := 0;
      for c2 in (select type,  from B where name=c1.name order by id)
      loop
       i := i+1;
       v_sql1 := v_sql1 || ',Type' || i || ',Mark' || i;
       v_sql2 := v_sql2 || ','''||c2.type||'','||c2.;
      end loop;
      v_sql1 := 'insert into B('||v_sql1||') values('||v_sql2||')';
      execute immediate v_sql1;
     end loop;
     commit;
    end;