MySql - Cursor

JiMin LEE·2025년 5월 5일
0

TIL

목록 보기
6/9

📌 Cursor

결과 집합(Result Set)을 한 행(row)씩 순차적으로 처리할 수 있게 해주는 도구

  • SELECT 결과로 여러 행이 나왔을 때,
    이를 하나씩 꺼내어 반복 처리할 수 있도록 하는 반복 포인터라 생각하면 쉽다.



✅ Cursor를 사용하는 이유

일반적으로 SQL은 한 번에 여러 행을 처리하지만 어떤 작업은 "하나씩" 처리해야 할 때가 있다.

Cursor 대표 예시

  • 학생 테이블에서 학생들 하나씩 불러와서, 각각의 학점 계산 결과를 다른 테이블에 기록할 때

  • 여러 명에게 개별 알림 메시지를 보낼 때

  • 어떤 조건에 따라 하나씩 다른 UPDATE를 해야 할 때

✅ 커서의 기본 흐름 (4단계)

  1. DECLARE CURSOR

    • 사용할 커서를 선언합니다. 어떤 SELECT 결과를 순회할 것인지 지정합니다.
  2. OPEN CURSOR

    • 커서를 열어 결과 집합을 준비합니다.
  3. FETCH

    • 한 줄씩 데이터를 가져옵니다. 반복문(WHILE 등)과 함께 자주 사용합니다.
  4. CLOSE CURSOR

    • 커서를 닫습니다. 메모리 누수를 막기 위해 꼭 해야 합니다.

❗주의 사항

  • Cursor는 성능이 느릴 수 있다.
    - 수천, 수만 건 이상 순회하면 오히려 SQL 자체의 집합 처리 방식이 더 빠르다.

  • 커서는 트랜잭션 안에서 사용되며, 에러나 종료 시 반드시 닫아야 한다.

  • 커서는 Stored Procedure 안에서만 사용 가능하다.



🔚 언제 사용하나?

  • 개별 행을 조건에 따라 다른 로직으로 처리할 때

  • SQL로는 한 번에 처리할 수 없는 절차적 로직이 필요할 때

  • 루프가 필요한 반복 작업을 데이터에 대해 수행해야 할 때

0개의 댓글