我是一个初学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”这样一个字符串请各位高手指教一下,这个函数怎么写?

解决方案 »

  1.   

    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;
      

  2.   

    在 return(Result) 之前加上 Result:=v_name 即可得到输出值
      

  3.   

    CSDN用的不熟哈,不知道给分成功了没有