灵活利用配置表,制作报表

create or replace procedure zhou_test as
  sSql       varchar(2000);
  TABLE_NAME varchar(60);
  V_col_name varchar(60);
  V_col_SQL  varchar(1000);
  -----根据我的配置表走
  CURSOR sv_col IS
    select col_name, col_sql from zhou.sv_sc_report;
begin
  ----首先生成报表(初始化)(cno,cname)
  table_name := 'REPORT_SC';
  exist_table(table_name);
  sSql := 'create TABLE zhou.REPORT_SC  as    select CNO,CNAME FROM zhou.C';
  EXECUTE IMMEDIATE sSql;
  sSql := 'alter table REPORT_SC  add   primary key(CNO)';
  EXECUTE IMMEDIATE sSql;
  ----循环游标(遍历配置表)分别求每个条件的字段
  OPEN sv_col;
  loop
    FETCH sv_col
      INTO V_col_name, V_col_SQL;
    EXIT WHEN sv_col%NOTFOUND;
 
    table_name := 'SC_TEMP1';
    exist_table(table_name);
    sSql := 'create TABLE SC_TEMP1  as    select CNO,count(*) NUM,avg(grade) avg_num  from SC WHERE   ' ||
            V_COL_SQL || '  GROUP BY  CNO ';
    EXECUTE IMMEDIATE sSql;
    sSql := 'alter table SC_TEMP1  add   primary key(CNO)';
    EXECUTE IMMEDIATE sSql;
    table_name := 'SC_TEMP2';
    exist_table(table_name);
    sSql := 'create TABLE SC_TEMP2  as    select A.*,B.NUM  ' || V_col_name ||
            '人数,b.avg_num  ' || V_col_name ||
            '平均分  from REPORT_SC  A,SC_TEMP1 B WHERE   A.CNO=B.CNO(+) ';
    EXECUTE IMMEDIATE sSql;
    sSql := 'alter table SC_TEMP2  add   primary key(CNO)';
    EXECUTE IMMEDIATE sSql;
    table_name := 'REPORT_SC';
    exist_table(table_name);
    sSql := 'RENAME  SC_TEMP2 TO REPORT_SC';
    EXECUTE IMMEDIATE sSql;
    commit;
 
  END LOOP;
  close SV_COL;

end ma_test;
/
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值