sql - loop - ¿Por qué una conexión por expresión en un bucle FOR, se ejecuta solo una vez?
while sql (1)
Es un error en una versión de Oracle 9i confirmada hasta 9.2.0.8 , pero no más allá.
Se discutió previamente en asktom.oracle.com/pls/apex/… , la respuesta es simplemente que "sqlplus hace eso" .
El soporte Premier para Oracle 9.2 terminó el 2007-07-31 y el soporte extendido terminó el 2010-06-30. Para solucionar este problema, se recomienda que actualice a una versión actual de Oracle; si no puede, debe parchar su base de datos pasada la versión 9.2.0.8.
Acabo de encontrar lo que creo que es un comportamiento inesperado en PLSQL vs SQL en Oracle.
Si ejecuto esta consulta en SQLDeveloper obtengo 5 resultados:
select level lvl from dual connect by level <=5;
Pero si ejecuto esta declaración en 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;
La variable w_counter termina con el valor 1 (extraño)
pero la parte más extraña es que si encapsulo la consulta en una subconsulta ... algo como:
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;
La variable w_counter termina con el valor 5 ...
¿Qué tienes que decir a esto?
Estoy usando Oracle 9.2i