http://pan.baidu.com/share/link?shareid=385879&uk=185735930
我的原表是在上面链接的.sql中写着,前面有10列保留,后面的S1,S2,S3...Sn有一百多个字段,想通过存储过程把以S开头的列转成行,S列数据是零时,过滤(不要该行)。

解决方案 »

  1.   

    不知道你能不能接受这个东西http://pan.baidu.com/share/link?shareid=380000&uk=873911022
      

  2.   

    declare
    v_name varchar2(20);
    v_cnt varchar2(2);
    v_sql varchar2(1000);
    begin
    for c  in (select COLUMN_NAME v_name from dba_tab_columns where TABLE_NAME='SALARY_BASE' and COLUMN_NAME like 'S%') loop
         v_sql:='insert into SALARY_BASE_ROW 
     select year,month,dept,eid,ename, etype,paycount,payshould,paydeduct,paysum,'||''''||c.v_name||''''||','||c.v_name||' 
         from SALARY_BASE where '||c.v_name||' >0';
     execute immediate v_sql;
     commit;
    end loop;
    end;SQL> select count(*) from  SALARY_BASE_ROW ;  COUNT(*)
    ----------
            46