用STORED procedure 可以很容易的解决啊?
(用cursor)

解决方案 »

  1.   

    create or replace function get(p_id in varchar2) return varchar2 is
     Result varchar2(100);
     
     cursor rad_cursor(v_id varchar2) is
            select 学生名 from 班级学生表 
            where 班级=v_id ;
    v_count Number;  
    begin
    v_count:=0;
       for v_sor in rad_cursor(p_id) loop
         if v_count=0 then
           Result:=v_sor.学生名;
           v_count:=v_count+1;
         else
          Result:=Result||','||v_sor.学生名;
         end if;
        end loop; 
       return(Result);
    end get;
    /select 班级,get(班级) from 班级学生表 grout by 班级;
      

  2.   

    我们通常使用sum进行数据统计,但oracle内部对该函数的实现肯定是很复杂的,如果要写一个通用的sum字符串的函数就需要了解oracle的内部机制,这将是oracle开发人员的事情了。
    以前我也看到有人问怎么写个sum字符串的函数---但实际上是不可能有一个通用的这样的函数的。一个表的记录可以有很多条,把字符串都合并起来将是什么情况?
    所以不用费力去写这么一个函数。
      

  3.   

    回答得够细致的了,beckhambobo(beckham) 脚本都给写好了,oracle没有这样的功能,一些细节的问题只能自己写脚本。
    这个问题在论坛中出现多次了,留心一点就可以了。
      

  4.   

    black_snail(●龙飞虎○) :我知道用STORED procedure 可以很容易的解决,问题是怎么通用。 beckhambobo:谢谢你的代码,你真是好人,可我要的是通用的方案。jiezhi(西域浪子) :......但实际上是不可能有一个通用的这样的函数的。一个表的记录可以有很多条,把字符串都合并起来将是什么情况?所以不用费力去写这么一个函数。
      --为什么不可能?情况不是列出来了吗?oracle不提供这样的函数那么只能自己去写,为什么不用费力?KingSunSha(弱水三千) :难道对字符串汇总就没什么实用价值吗?实用价值标准是谁来定义的?字符串怎么就不能解决记录顺序问题?采用类似beckhambobo的方法时,按字符串(学生名)排序不就行了吗?如果不明确指明顺序就无所谓,按记录出现的顺序即可。我的例子就属于无所谓的情况,“张三,李四”与“李四,张三”都可以。oracle不提供这样的函数当然只能自己写,问题是如何通用。hrb_qiuyb(大森林) :在什么地方回答细致了?我的问题没有得到解决呀~~
      

  5.   

    如果要通用,就把你的条件做成一个参数传进取,在函数里用动态的sql就可以了
      

  6.   

    用concat函数不行吗?我认为可以。
    select concat(concat(a,b),c) col_name from table;
      

  7.   

    w_tsinghua:这确实是个办法,但好象不是很好写,如果你有现成的代码能不能贴一段上来?