create or replace function chuanru2(p_user_id in varchar) return varchar2 is
Result varchar2(2000);
begin
if p_user_id is not null then
declare
--类型定义
cursor c_qxjs is
select gi.group_name, f.type as type_name
from group_info gi, group_user gu, fxgl_sapce f
where gu.user_id = p_user_id
and gu.group_id = gi.group_id
and f.id = gu.type_id
order by gi.group_id;
--定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
c_row c_qxjs%rowtype;
begin
for c_row in c_qxjs loop
result := result || c_row.group_name || '(' || c_row.type_name || ')' || ',';
end loop;
end;
else
result := '';
end if;
return(Result);
end chuanru2;
写了这个函数 调试结果是这样的
我想让测试结果变成这样, 如 初评员(合同管理,财务管理....),复核员(合同管理,财务管理.....),....group_name 不重复,只显示一个
怎么在 begin .... end 中 写一段逻辑 以达到我想要的 测试结果啊??
求大神帮忙 ~
------解决思路----------------------
双层嵌套游标
外层group_name,内层type_name,组合成字符串,就可以了
------解决思路----------------------
把游标的查询sql改成:
select group_name
------解决思路----------------------
'('
------解决思路----------------------
wm_concat(type_name)
------解决思路----------------------
')' as resultN from (
select gi.group_name, f.type as type_name
from group_info gi, group_user gu, fxgl_sapce f
where gu.user_id = p_user_id
and gu.group_id = gi.group_id
and f.id = gu.type_id
order by gi.group_id
) group by group_name
;
然后 result := result
------解决思路----------------------
c_row.group_name
------解决思路----------------------
'('
------解决思路----------------------
c_row.type_name
------解决思路----------------------
')'
------解决思路----------------------
','; 改成:result := result
------解决思路----------------------
c_row.resultN
------解决思路----------------------
',';
试试看