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 班级;
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 班级;
以前我也看到有人问怎么写个sum字符串的函数---但实际上是不可能有一个通用的这样的函数的。一个表的记录可以有很多条,把字符串都合并起来将是什么情况?
所以不用费力去写这么一个函数。
这个问题在论坛中出现多次了,留心一点就可以了。
--为什么不可能?情况不是列出来了吗?oracle不提供这样的函数那么只能自己去写,为什么不用费力?KingSunSha(弱水三千) :难道对字符串汇总就没什么实用价值吗?实用价值标准是谁来定义的?字符串怎么就不能解决记录顺序问题?采用类似beckhambobo的方法时,按字符串(学生名)排序不就行了吗?如果不明确指明顺序就无所谓,按记录出现的顺序即可。我的例子就属于无所谓的情况,“张三,李四”与“李四,张三”都可以。oracle不提供这样的函数当然只能自己写,问题是如何通用。hrb_qiuyb(大森林) :在什么地方回答细致了?我的问题没有得到解决呀~~
select concat(concat(a,b),c) col_name from table;