我有表EMP,其中包含他所在的员工姓名和部门。 像说的那样(显然它比我的例子大):
dept name
10 Clark
10 King
20 Jacob
30 Michael
10 Miller
30 John
40 Leonardo
然后是第二张表:
Emps_in_Depts (Deptno NUMBER(2), Employees VARCHAR2(4000))
我的任务是编写PL / SQL代码,以这种方式将数据插入第二个表:
(10,CLARK$KING$MILLER$)
(30,Michael$John)
每个部门都有等等。
我有在光标内部使用光标的基本思路,但我不知道如何将多行的值合并为一个。
DECLARE
CURSOR kursor
IS
SELECT DISTINCT deptno
FROM emp;
departament
emp.deptno%TYPE;
BEGIN
OPEN kursor;
LOOP
FETCH kursor INTO departament;
EXIT WHEN kursor%NOTFOUND;
--HERE SHOULD BE SECOND CURSOR
--which I'm not sure how to code so that it fetches from
--SELECT ename FROM emp WHERE deptno = departament
--
--and it should insert values into Emps_in_depts here I guess.
END LOOP;
CLOSE kursor;
END;
我真的很感动任何帮助! 提前致谢
诚恳 的roff
答案 0 :(得分:2)
检查函数LISTAGG(自Oracle 11.2起可用),您可以从文档中复制它。
答案 1 :(得分:1)
我目前不在工作,所以我没有oracle数据库来输入它并进行语法检查。但你所做的基本上是:
DECLARE
TYPE EmpCurTyp IS REF CURSOR;
empname EmpCurTyp;
nameList varchar2(4000);
name varchar2(200);
BEGIN
OPEN empname FOR -- open cursor variable
'SELECT name FROM emp WHERE dept = :s' USING departament;
LOOP
FETCH empname INTO name
EXIT WHEN empname%NOTFOUND
nameList:=nameList||'$'||name
END LOOP;
CLOSE empname;
INSERT INTO emps_in_deps VALUES (departament, nameList)
END