programing

FOR 루프에서 식을 통해 연결하는 이유는 무엇입니까?

muds 2023. 7. 5. 21:04
반응형

FOR 루프에서 식을 통해 연결하는 이유는 무엇입니까?

방금 Oracle에서 PLSQL 대 SQL에서 예상치 못한 동작을 발견했습니다.

SQL Developer에서 이 쿼리를 실행하면 다음과 같은 5가지 결과가 나타납니다.

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

하지만 SQL Developer에서 이 문을 실행하면 다음과 같습니다.

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를 사용하고 있습니다.

9.2.0.8까지 확인된 Oracle 9i 버전의 버그이지만 그 이후는 아닙니다.

이전에 "Asqlplus가 그렇게 한다"는 답변으로 "Ask Tom"에서 논의되었습니다.

Oracle 9.2에 대한 Premier 지원은 2007-07-31일에 종료되었으며 확장 지원은 2010-06-30일에 종료되었습니다.이 문제를 해결하려면 최신 버전의 Oracle로 업그레이드하는 것이 좋습니다. 업그레이드할 수 없는 경우 데이터베이스를 버전 9.2.0.8 이전에 패치해야 합니다.

언급URL : https://stackoverflow.com/questions/22815549/why-does-a-connect-by-expression-in-a-for-loop-execute-only-once

반응형