功能:实现动态添加表字段,并计算NUMBER类的字段的总和
有两张表 j,s
j表的字段是动态的,
s表中存储的是j表的字段信息可能描述不是很清楚,直接晒代码存储过程:for s in (select * from t_finance_detail_view) loop
        pCount:=0;
        for j in (select * from t_finance_option tfo where tfo.sch_id=sch_id and tfo.option_dtype=1) loop         --pTempStr := 's.'||j.option_col;
         --execute immediate pTempStr into pInt;
         -- pInt:=s.(j.option_col);
         --(j表的j.option_col是s的列名)  
          pMsg:=pMsg+','||j.option_name||':'||pInt;
          if j.option_type=1 then
         pCount:=pCount+pInt;
         else
          pCount:=pCount-pInt;
           end if;
        end loop;
end loop;

解决方案 »

  1.   

    补充:J表存储着需要查询S表的字段名   看这句  pInt:=s.(j.option_col);
    就很说明我的目的,可惜它是错的,还请大侠们帮忙啊!
      

  2.   

    目的直观的说是取出s表中j.option_col列的值
      

  3.   

    没怎么看懂你的需求你要统计NUMBER类的字段个数,oracle有系统表来存储各用户表的信息,直接查询系统表就可以得到,为什么还要新建一张表来统计呢?可以看下系统试图USER_TABLES,USER_TAB_COLS,USER_TAB_COLUMNS
      

  4.   

    直白点,不要看上面
    怎么实现这个问题就好了
     for s in (select * from t_finance_detail_view) loop
          pCount := 0;
          for j in (select *
                      from t_finance_option tfo
                     where tfo.sch_id = sch_id
                       and tfo.option_dtype = 1) loop
            --pInt:=s.(j.option_col);--取出s表中j.option_col列的值(怎么实现这句话)
            pMsg := pMsg + ',' || j.option_name || ':' || pInt;
            if j.option_type = 1 then
              pCount := pCount + pInt;
            else
              pCount := pCount - pInt;
            end if;
          end loop;
    end loop;
      

  5.   

    改为下面这个试一下:
    execute immediate 'select s.'||j.option_col||' from dual' into pInt;
      

  6.   

    for j in (select *  from t_finance_option tfo  where tfo.sch_id = sch_id  and tfo.option_dtype = 1) loop  for s in (select xxxx(这里是列名为'option_col'的值) from t_finance_detail_view t where t.xxx(这里是获取列名称的字段) = j.ooption_col) loop
          pInt := s.xxx(这里是列名为'option_col'的值)
          pMsg := pMsg + ',' || j.option_name || ':' || pInt;
          
          if j.option_type = 1 then
             pCount := pCount + pInt;
          else
             pCount := pCount - pInt;
          end if;
          
      end loop;end loop;
      

  7.   


    -- 你的问题可以用动态游标来解决-- 在变量声明区声明动态游标
    TYPE TCUR IS REF CURSOR; 
    CUR TCUR;-- 使用动态SQL打开游标
    OPEN CUR FOR 'SELECT '||j.opetion_col||' FROM t_finance_detail_view';
    LOOP
         -- 取出返回的结果
         FETCH CUR INTO :放置结果的变量;
         EXIT WHEN CUR%NOTFOUND;
    END LOOP;
    CLOSE CUR;
      

  8.   


    -- 你的问题可以通过动态游标来解决-- 首先在变量声明区声明动态游标变量
    TYPE TCUR IS REF CURSOR; 
    CUR TCUR;-- 使用动态SQL打开游标
    OPEN CUR FOR 'SELECT '||j.opetion_col||' FROM t_finance_detail_view';
    LOOP
         -- 获取结果
         FETCH CUR INTO :放置结果的变量;
         EXIT WHEN CUR%NOTFOUND;
    END LOOP;
    CLOSE CUR;