Plsql PL/SQL:Cursor::检索每个部门的员工列表
如何将每个部门的员工列表从EMP表检索到逗号分隔的新表中 比如:Plsql PL/SQL:Cursor::检索每个部门的员工列表,plsql,cursor,Plsql,Cursor,如何将每个部门的员工列表从EMP表检索到逗号分隔的新表中 比如: [column x:ie deptno] [column y:ie ename] -------------------------- 7 Jesus, María, José 5 Staz, Przemek, Tomek 6 John, Jane, Bob 下表是我想把函数concatenate_列表编译的结果放在哪里 CREATE TA
[column x:ie deptno] [column y:ie ename]
--------------------------
7 Jesus, María, José
5 Staz, Przemek, Tomek
6 John, Jane, Bob
下表是我想把函数concatenate_列表编译的结果放在哪里
CREATE TABLE Z
(
x NUMBER(2) NOT NULL,
y VARCHAR2 (4000) NOT NULL
);
SET SERVEROUTPUT ON
CREATE OR REPLACE FUNCTION concatenate_list (xy_cursor IN SYS_REFCURSOR)
RETURN VARCHAR2
IS
lret VARCHAR2(30000);
ltemp VARCHAR2(30000);
BEGIN
LOOP
FETCH xy_cursor
INTO ltemp;
EXIT WHEN xy_cursor%notfound;
lret := lret || ',' || ltemp;
END LOOP;
RETURN LTRIM(lret, ',');
END;
/
SHOW ERRORS
如何插入“函数连接编译”的结果并获得上述结果。
也许可以用这样的方法:
INSERT INTO Z( x, y) SELECT e1.x,
concatenate_list(CURSOR(SELECT e2.y FROM EMP e2 WHERE e2.x= e1.x));
但是如何在PL/SQL块中设置它,这可能会对您有所帮助
declare
type cur_name is ref cursor;
emp_name cur_name;
v_ename emp.ename%type;
v_all_ename varchar2(1000);
v_deptno emp.deptno%type;
cursor c is select deptno,cursor(select ename from emp e where e.deptno=f.deptno) from emp f group by deptno;
begin
open c;
loop
fetch c into v_deptno,emp_name;
exit when c%notfound;
loop
fetch emp_name into v_ename;
exit when emp_name%notfound;
v_all_ename:=v_all_ename||v_ename;
v_all_ename:=v_all_ename||',';
end loop;
dbms_output.put_line(v_deptno||' '||v_all_ename);
v_all_ename:='';
end loop;
close c;
end;