Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle, свържете се чрез rownum

Обяснението в отговора на Крокодилко е просто грешно. Може да пренебрегнете знака „Правилен отговор“ и многобройните гласове „за“, пак е грешно. Интересно е, че той остави като упражнение точно случая, който доказва грешността на обяснението.

A CONNECT BY заявката не работи "сякаш" нови таблици (или нови изходни набори от редове на SELECT отчети, така или иначе) се генерират на всяка стъпка. Това е грешката в аргумента.

По-скоро има самоедна набор от редове, генериран като цяло (във всички стъпки). Вярно е, че нови редове се добавят въз основа на редовете, генерирани в предишната стъпка; но самият набор от редове е един и расте, а не отделни набори от редове.

Това е особено подходящо по отношение на ROWNUM . ROWNUM се присвоява на редове в един набор от редове „резултат“, започващ с 1. В CONNECT BY заявка, има само един набор от редове и ROWNUM преминава от 1 към n във нарастваща последователност.

Ако отговорът на Крокодилко е правилен, тогава ROWNUM ще се рестартира при 1 на всяка стъпка. Това очевидно не е така:нека опитаме със "стандартна" йерархична заявка.

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да разрешите ORA-00900

  2. Лесен начин за стартиране на sqlplus скрипт от java

  3. Вземете текущото местно време на всяка държава в PL/SQL

  4. 12c колони IDENTITY

  5. Намерете и заменете низ в BLOB за работа или Excel файл