[英]PL/SQL: master detail loop using cursors
我目前有一個使用單個光標的主細節
DECLARE
CURSOR emps_cur (department_id_in IN INTEGER)
IS
select ENAME,DNAME,d.DEPTNO
from scott.EMP e, scott.DEPT d
where d.DEPTNO = e.DEPTNO;
BEGIN
FOR rec IN emps_cur (1700)
LOOP
DBMS_OUTPUT.put_line (rec.DEPTNO||' '||rec.DNAME);
DBMS_OUTPUT.put_line (rec.ENAME);
END LOOP;
END;
/
結果是:
Statement processed.
10 ACCOUNTING
CLARK
10 ACCOUNTING
MILLER
10 ACCOUNTING
KING
20 RESEARCH
FORD
20 RESEARCH
SCOTT
20 RESEARCH
JONES
20 RESEARCH
SMITH
20 RESEARCH
ADAMS
30 SALES
WARD
30 SALES
MARTIN
30 SALES
TURNER
30 SALES
JAMES
30 SALES
ALLEN
30 SALES
BLAKE
我一直試圖弄清楚如何循環它,因此結果如下所示:
10 ACCOUNTING
CLARK
MILLER
KING
20 RESEARCH
FORD
SCOTT
JONES
SMITH
ADAMS
30 SALES
WARD
MARTIN
TURNER
JAMES
ALLEN
BLAKE
本質上,在下方打印 deptno 和 dname 以及指定的員工(沒有重復)。 對不起,如果這看起來很初級。 剛開始嘗試學習 PL/SQL,我無法從搜索引擎中找到答案。
在循環結束時使用 ref.dname 創建一個變量 v_dname。 在循環開始時,將 rec.dname 與 v_dname 進行比較。 如果值相同,則說明您在同一部門,並且不會對其進行 dbms。
DECLARE
vCurrentDeptName dept.DNAME%type := 'impossible name';
CURSOR emps_cur (department_id_in IN INTEGER)
IS
select ENAME,DNAME,JOB
from scott.EMP e, scott.DEPT d
where d.DEPTNO = e.DEPTNO;
BEGIN
FOR rec IN emps_cur (1700)
LOOP
if vCurrentDeptName != rec.DNAME then DBMS_OUTPUT.put_line (rec.DNAME); vCurrentDeptName := rec.DNAME; end if;
DBMS_OUTPUT.put_line (rec.ENAME);
END LOOP;
END;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.