Penjelasan dalam jawaban Krokodilko salah. Anda dapat mengabaikan tanda "Jawaban Benar" dan banyak suara positif, itu masih salah. Sangat menarik bahwa dia pergi sebagai latihan kasus yang membuktikan bahwa penjelasannya salah.
CONNECT BY
kueri tidak berfungsi "seolah-olah" tabel baru (atau baris keluaran baru dari SELECT
pernyataan, bagaimanapun) dihasilkan pada setiap langkah. Ini adalah kesalahan dalam argumen.
Sebaliknya, hanya ada satu rowset dihasilkan secara keseluruhan (di semua langkah). Memang benar bahwa baris baru ditambahkan berdasarkan baris yang dihasilkan pada langkah sebelumnya; tetapi rowset itu sendiri adalah satu, dan tumbuh, bukan rowset yang terpisah.
Ini sangat relevan dengan ROWNUM
. ROWNUM
ditugaskan ke baris dalam satu set baris "hasil", dimulai dengan 1. Dalam CONNECT BY
kueri, hanya ada satu baris, dan ROWNUM
pergi dari 1 ke n dalam urutan yang meningkat.
Jika jawaban Krokodilko benar, maka ROWNUM
akan restart pada 1 pada setiap langkah. Ini jelas bukan masalahnya:mari kita coba pada kueri hierarkis "standar".
select empno, ename, mgr, level, rownum
from scott.emp
start with mgr is null
connect by prior empno = mgr
;
EMPNO ENAME MGR LEVEL ROWNUM
---------- ---------- ---------- ---------- ----------
7839 KING 1 1
7566 JONES 7839 2 2
7788 SCOTT 7566 3 3
7876 ADAMS 7788 4 4
7902 FORD 7566 3 5
7369 SMITH 7902 4 6
7698 BLAKE 7839 2 7
7499 ALLEN 7698 3 8
7521 WARD 7698 3 9
7654 MARTIN 7698 3 10
7844 TURNER 7698 3 11
7900 JAMES 7698 3 12
7782 CLARK 7839 2 13
7934 MILLER 7782 3 14