반응형
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
반응형
'programing' 카테고리의 다른 글
SpringBoot @WebMvcTest, 자동 배선 RestTemplateBuilder (0) | 2023.07.05 |
---|---|
WooCommerce의 변형에 대한 확인란을 사용하여 다중 선택 허용 (0) | 2023.07.05 |
Float/Firebase 앱에 아직 구성되지 않은 앱이 표시됩니다. (0) | 2023.07.05 |
스프링 부트에서 UTF-8 문자 인코딩을 설정하는 방법은 무엇입니까? (0) | 2023.07.05 |
MongoDb 2.2, 2.4 및 2.6의 성능 저하 (0) | 2023.07.05 |