결과 집합(Result Set)을 한 행(row)씩 순차적으로 처리할 수 있게 해주는 도구
- SELECT 결과로 여러 행이 나왔을 때,
이를 하나씩 꺼내어 반복 처리할 수 있도록 하는 반복 포인터라 생각하면 쉽다.
일반적으로 SQL은 한 번에 여러 행을 처리하지만 어떤 작업은 "하나씩" 처리해야 할 때가 있다.
Cursor 대표 예시
- 학생 테이블에서 학생들 하나씩 불러와서, 각각의 학점 계산 결과를 다른 테이블에 기록할 때
- 여러 명에게 개별 알림 메시지를 보낼 때
- 어떤 조건에 따라 하나씩 다른 UPDATE를 해야 할 때
DECLARE CURSOR
OPEN CURSOR
FETCH
CLOSE CURSOR
- Cursor는 성능이 느릴 수 있다.
- 수천, 수만 건 이상 순회하면 오히려 SQL 자체의 집합 처리 방식이 더 빠르다.
- 커서는 트랜잭션 안에서 사용되며, 에러나 종료 시 반드시 닫아야 한다.
- 커서는 Stored Procedure 안에서만 사용 가능하다.
개별 행을 조건에 따라 다른 로직으로 처리할 때
SQL로는 한 번에 처리할 수 없는 절차적 로직이 필요할 때
루프가 필요한 반복 작업을 데이터에 대해 수행해야 할 때