在package里面,用动态生成的SQL建立了一个ref cursor,现在不知道如何去取列值,因为列名是动态的定义cursor:type curtype is ref cursor;
cur_data curtype; 动态sql:select z.item,'||V_COL||'
from view_colevent v, z_audience_overview z
where v.audience(+) = z.item
and z.report_name = ''audience_overview''
group by z.item, z.sort_order
order by z.sort_order
其中 V_COL='sum(decode(v.product_type,'pp',1,0)'打开cursor:
open cur_data for v_sql;取值: for V in cur_data loop 在这里,如何取值呢? V.???? 因为列名不定非常感谢各位大侠指点!!!
解决了,另送100分
cur_data curtype; 动态sql:select z.item,'||V_COL||'
from view_colevent v, z_audience_overview z
where v.audience(+) = z.item
and z.report_name = ''audience_overview''
group by z.item, z.sort_order
order by z.sort_order
其中 V_COL='sum(decode(v.product_type,'pp',1,0)'打开cursor:
open cur_data for v_sql;取值: for V in cur_data loop 在这里,如何取值呢? V.???? 因为列名不定非常感谢各位大侠指点!!!
解决了,另送100分
declare
v_yhbh varchar2(10);
v_yhmc varchar2(60);
i number:=1;
cursor bh_list is select distinct yhbh,yhmc from dbuser_manager order by yhmc ;
begin
open bh_list;
fetch bh_list into v_yhbh,v_yhmc;
while bh_list %found loop
add_list_element('BLK_LOGON.userid',i,v_yhmc,v_yhbh);
i:=i+1;
fetch bh_list into v_yhbh,v_yhmc;
end loop;
close bh_list;
end;
select z.item,'||V_COL||' new_col
from view_colevent v, z_audience_overview z
where v.audience(+) = z.item
and z.report_name = ''audience_overview''
group by z.item, z.sort_order
order by z.sort_order
貌似我没写明白
列数是不一定的其中
V_COL='sum(decode(v.product_type,'pp',1,0)' || 'sum(decode*(*&&(*)' || ....||...||是通过一个Sql 循环生成的
V_COL:=V_COL||',sum(decode(v.product_type,'''||V.PRODUCT_TYPE||''',1,0))';
END LOOP;
那取值的时候业务如何去运算?亦即是你将要取出什么结果都不知道,就谈不上进行业务运算了.
如果你真正是列数不固定,那就要从业务逻辑上去设计了,这就存在判断问题.
建议:declare v_cnt number;
begin
v_cnt := 0;
FOR V IN (SELECT PRODUCT_DESCRIPTION_ENGLISH,PRODUCT_TYPE FROM Z_PRODUCTS WHERE CONF_ID=ICONF_ID AND PRODUCT_DATE=IDAY ORDER BY PRODUCT_TYPE) LOOP
v_cnt := v_cnt + 1;
V_COL:=V_COL||',sum(decode(v.product_type,'''||V.PRODUCT_TYPE||''',1,0)) col' || to_char(v_cnt);
END LOOP;
end;----
现在,由v_cnt可以得到总共有多少列,而且列的名字是a1,a2,a3...以次类推,你由此而访问这些动态的列。
我自己也想出来一种,就是把动态生成的列拼起来,变成一列,然后用语句去拆分非常感谢。
结贴bw555 和codearts 各拿50
另外我会开一贴,请两位过来再拿50