Я только что нашел, что, по моему мнению, несколько неожиданное поведение в 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