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
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
我想得到有 如果最多有N 个 编号 应该有1 + N个编号+ N个数量。总共是2N+1 列。
这个好实现吗?