본문 바로가기

IT

PL SQL 오라클 FOR문과 CURSOR의 차이


오라클 PL/SQL에서 FOR 문과 CURSOR는 거의 유사해 보입니다.
오라클 FOR문과 커서는 솔직히 어떤 걸 써도 동작하는 것에 큰 문제는 없기 때문에 굳이 구분을 해야 하나? 라는 생각을 할 수 있습니다.

하지만 FOR 루프와 CUSOR는 각각 서로 다른 목적으로 사용됩니다.
FOR 문은 일반적으로 순차 처리를 위해 사용하는 경향이 있으며,
CURSOR는 결과 집합을 처리하는 경우가 많습니다.

FOR 루프
- 반복 횟수가 정해져있는 경우 유용합니다.
- 데이터베이스 테이블의 모든 행을 처리합니다.
- 지정한 숫자 만큼 수행할 때 유리합니다.

CURSOR(커서)
- 조회한 결과 에서(집합에서) 특정 행에 접근 할 때 유용합니다.
(조회 결과가 여러 테이블을 조인한 복잡한 쿼리일 가능 성이 높은데 이때 커서를 사용하면 좋습니다.)

물론 FOR 루프를 커서처럼 사용하여 결과를 조회하고 처리할 수 있습니다.

Q. FOR와 CURSOR의 성능차이가 있을까요?

FOR 루프는 결과 집합을 모두 메모리에 올려놓고 작업을 수행하고,
CURSOR는 결과 집합을 하나씩 처리하게 되어 있습니다.
결과 집합이 큰 경우에는 FOR루프가 많은 메모리를 사용하고, CURSOR는 조금씩 메모리에 로드하기 때문에 메모리 사용량이 더 적을 수 있습니다.

요즘처럼 H/W성능이 좋을때 큰 차이는 없습니다.(대형 서비스가 아닌경우 에만)

이런경우에도 FOR냐 CURSOR냐 고민할 시간에 쿼리를 적절하게 튜닝하는 것이 해결책인 경우가 많습니다.

사실 FOR와 CURSOR를 비교하기 보다는 WHILE LOOP와 비교하는 경우가 훨씬 많습니다.
두개는 반복 횟수가 정해졌느냐 안정해 졌느냐 외에 차이점은 딱히 없는것 같습니다.

반복문을 선택하는 것은 프로그래머의 마음입니다.
하지만 기왕이면 고려하면 좋은 것들을 나열하고 글을 마치겠습니다.

1. 반복 횟수 : 정해지면 FOR, 정해지지 않으면 WHILE, 한번은 돌려야하면 DO-WHILE
2. 조건 : 
3. 데이터 타입 : 배열 다룰때는 FOR가 유리함
4. 가독성 : 간단한 것은 FOR 루프 쓰면 코드가 간결할 수 있음
5. 성능 : FOR루프가 WHILE보다 빠르나 큰 의미는 없음

반응형