FYICREATE OR REPLACE FUNCTION get_c2(empid NUMBER)  
RETURN VARCHAR2  
IS  
Col_c2 VARCHAR2(4000);  
BEGIN 
FOR cur IN (SELECT code FROM empcode WHERE id = empid) LOOP   
Col_c2 := Col_c2|| ',' || cur.code;  
END LOOP;  
Col_c2 := rtrim(Col_c2,1); 
RETURN Col_c2;  
END; 

CREATE OR REPLACE FUNCTION get_c3(empid NUMBER)  
RETURN VARCHAR2  
IS  
Col_c2 VARCHAR2(4000);  
BEGIN 
FOR cur IN (SELECT r.rolename FROM emprole er, role r WHERE er.roleid = r.roleid(+) and er.id = empid) LOOP   
Col_c2 := Col_c2|| ',' || cur.code;  
END LOOP;  
Col_c2 := rtrim(Col_c2,1); 
RETURN Col_c2;  
END; 
/ 运行sql的到结果:
select e.empid, e.name, e.age, get_c2(code) code, get_c3(rolename) rolename
from employee e, empcode ec, emprole er, role r
where e.empid(+) = ec.empid and e.empid(+) = er.empid and er.roleid = r.roleid(+)
group by e.empid