日期:2014-05-17  浏览次数:20750 次

请教一个函数的写法?
我是一个初学Oracle的人,很多地方要请教大家,现在有一个项目与部门的多对多关系,多对多靠一个中间关系表实现,项目对应的部门有不同的状态,这个状态标识也存在关系表中,已知一个项目,查找对应的部门,语句是

SELECT   "部门 ". "部门名称 ",  
            "中间关系表 ". "部门状态 "
FROM   "部门 "   INNER   JOIN
            "中间关系表 "   ON  
            "部门 ". "部门ID "   =   "中间关系表 ". "部门ID "
WHERE   ( "中间关系表 ". "项目ID "   =   项目ID)

我想把这个写成一个函数,传入的就是项目ID,传出的就是所有部门的字符串以及状态说明,有一点点聚合的意思,也就是SELECT语句查出来的本应该是

部门名称   部门状态
AAA                   0
BBB                   1
CCC                   0

我想得到一个结果是“BBB   1,AAA   0,CCC   0”这样一个字符串

请各位高手指教一下,这个函数怎么写?

------解决方案--------------------
create or replace function test(proId in varchar2) return varchar2 is
Result varchar2(1000);
v_name varchar2(1000);
cursor cur_name is SELECT "部门 ". "部门名称 " as deptName,
"中间关系表 ". "部门状态 " as deptStatus
FROM "部门 " INNER JOIN
"中间关系表 " ON
"部门 ". "部门ID " = "中间关系表 ". "部门ID "
WHERE ( "中间关系表 ". "项目ID " = proId);
begin
v_name := ' ';
for cur_name_get in cur_name
Loop
v_name := v_name || cur_name_get.deptName|| ' '||cur_name_get.deptStatus|| '; ';
End Loop;
Dbms_Output.put_line( 'last_v_name: '||v_name);
return(Result);
end test;