当前位置: 代码迷 >> Oracle开发 >> orcale function 中 使用游标 遇到的有关问题
  详细解决方案

orcale function 中 使用游标 遇到的有关问题

热度:428   发布时间:2016-04-24 06:24:44.0
orcale function 中 使用游标 遇到的问题
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 
------解决思路----------------------
',';

试试看
  相关解决方案