Почему соединение по выражению в цикле FOR выполняется только один раз?

Я только что нашел то, что я считаю несколько неожиданным поведением в PLSQL против SQL в Oracle.

Если я выполню этот запрос на SQLDeveloper, я получу 5 результатов:

select level lvl from dual connect by level <=5;

Но если я запускаю это утверждение в SQLDeveloper:

declare
  w_counter number :=0;
begin
  for REC in (select level lvl from dual connect by level <=5)
  loop
    w_counter := w_counter+1;
  end loop;
  dbms_output.put_line('W_COUNTER: '|| w_counter);
end;

Переменнаяw_counter заканчивается со значением 1 (странно)

но самая странная часть в том, что если я инкапсулирую запрос в подзапрос ... что-то вроде:

declare
  w_counter number :=0;
begin
  for REC in (select * from (select level lvl from dual connect by level <=5))
  loop
    w_counter := w_counter+1;
  end loop;
  dbms_output.put_line('W_COUNTER: '|| w_counter);
end;

w_counter переменная заканчивается значением 5 ...

Что вы должны сказать на это?

Я использую Oracle 9.2i

Ответы на вопрос(1)

Ваш ответ на вопрос