用這技術可實作不限階層 bom 表, 搭配先前 With clause 的技術, 彈性就更大. 實作出的 bom 表遠比前人用一堆子查詢作出的漂亮的許多. 以下我們以人事的例子來看...
/* EMPNO ENAME JOB MGR SAL COMM ---------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 800 7499 ALLEN SALESMAN 7698 1600 300 7521 WARD SALESMAN 7698 1250 500 7566 JONES MANAGER 7839 2975 7654 MARTIN SALESMAN 7698 1250 1400 7698 BLAKE MANAGER 7839 2850 7782 CLARK MANAGER 7839 2450 7839 KING PRESIDENT 5000 7844 TURNER SALESMAN 7698 1500 0 7900 JAMES CLERK 7698 950 7902 FORD ANALYST 7566 3000 7934 MILLER CLERK 7782 1300 */ select empno, lpad(' ',2*(level)) ename ename, job, hiredate, sal, comm from emp start with ename = ( select ename from emp where mgr is null ) connect by prior empno = mgr; /* EMPNO ENAME JOB HIREDATE SAL COMM ---------- -------------------- --------- -------- ---------- -------- 7839 KING PRESIDENT 81-11-17 5000 7566 JONES MANAGER 81-04-02 2975 7902 FORD ANALYST 81-12-03 3000 7369 SMITH CLERK 80-12-17 800 7698 BLAKE MANAGER 81-05-01 2850 7499 ALLEN SALESMAN 81-02-20 1600 300 7521 WARD SALESMAN 81-02-22 1250 500 7654 MARTIN SALESMAN 81-09-28 1250 1400 7844 TURNER SALESMAN 81-09-08 1500 0 7900 JAMES CLERK 81-12-03 950 7782 CLARK MANAGER 81-06-09 2450 7934 MILLER CLERK 82-01-23 1300 */
沒有留言:
張貼留言