Eu sei (em alto nível abstrato) como funcionam as hierarquias no Oracle, mas essa eu não entendo. Quando emitida a seguinte consulta:
select rownum-1 as num from dual
Eu tenho uma linha como resultado.
A seguinte consulta:
select rownum-1 as num from dual connect by level<=1000
está retornando 1000 linhas.
O que realmente está acontecendo no fundo desta consulta? Como o mecanismo Oracle está multiplicando linhas quando tenta resolver a hierarquia.
Se você observar a maneira SQL padrão de construir uma consulta recursiva, verá algo assim:
SQLFiddle: http://sqlfiddle.com/#!4/9eecb/4371/0
Como você pode ver, ele começa com a seleção de uma linha da
DUAL
tabela e, em seguida, aplica recursivamenteUNION ALL
a essa única linha enquanto a condição limitante permanece verdadeira. ACONNECT BY
construção está apenas escondendo esse encanamento SQL de você.Se você clicar no link Execution Plan no violino acima, verá isso.