반응형
Ant_U
DBA 개미
Ant_U
전체 방문자
오늘
어제
  • 분류 전체보기 (262)
    • AWS (3)
    • C# (1)
    • SQL (236)
      • MYSQL (186)
      • MSSQL (50)
    • 자격증 (20)
      • SQLD (12)
      • SQLP (8)

인기 글

최근 글

250x250
hELLO · Designed By 정상우.
Ant_U

DBA 개미

[MySQL] Cursor DECLARE 문 사용 방법 및 예시시
SQL/MYSQL

[MySQL] Cursor DECLARE 문 사용 방법 및 예시시

2024. 12. 30. 10:05
728x90
반응형



소개
MySQL의 커서(Cursor)는 저장 프로시저나 트리거 내에서 다중 행 결과 집합을 순차적으로 처리할 수 있는 도구입니다. 이 글에서는 MySQL Cursor를 선언(DECLARE)하여 사용하는 방법에 대해 중점적으로 설명하고, 간단한 예제 코드도 함께 다뤄 보겠습니다.
 
주요 특징
- 다중 행 결과 처리: SELECT 문이 반환하는 여러 행을 하나씩 순서대로 처리 가능.
- 저장 프로시저와 함께 사용: 일반적으로 저장 프로시저 내에서 커서를 선언하고 사용.
- 임시 상태 유지: 커서는 결과 집합을 메모리에 로드하여 처리 상태를 유지.

사용 예시
아래는 데이터베이스에 존재하는 employees 테이블에서 모든 직원의 이름을 순차적으로 처리하는 예제입니다.

예제 코드

DELIMITER //

CREATE PROCEDURE ProcessEmployees()
BEGIN
    -- 커서 선언을 위한 변수 선언
    DECLARE done INT DEFAULT 0;
    DECLARE emp_name VARCHAR(100);
    
    -- 커서를 선언하고 특정 SELECT 문의 결과를 참조
    DECLARE emp_cursor CURSOR FOR SELECT name FROM employees;
    
    -- 반복문 종료를 제어하기 위해 HANDLER 선언
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    -- 커서 열기
    OPEN emp_cursor;
    
    REPEAT
        -- 커서에서 데이터를 하나씩 가져오기
        FETCH emp_cursor INTO emp_name;

        -- 가져온 데이터 출력(여러 프로세스 추가 가능)
        IF NOT done THEN
            SELECT emp_name;
        END IF;
    UNTIL done END REPEAT;

    -- 커서 닫기
    CLOSE emp_cursor;
END //

DELIMITER ;




코드 설명
1. DECLARE emp_cursor:
   - emp_cursor라는 이름의 커서를 선언하고, SELECT name FROM employees로 정의된 결과 집합을 참조하도록 설정합니다.
   
2. DECLARE HANDLER:
   - 커서가 결과 집합의 마지막에 도달하면 더 이상 가져올 데이터가 없음을 나타내기 위해 NOT FOUND 핸들러를 done 변수에 설정합니다.

3. 커서 열기 및 닫기:
   - OPEN emp_cursor를 통해 커서를 열어 데이터를 처리할 준비를 합니다.
   - 작업이 끝나면 메모리 누수를 방지하기 위해 CLOSE emp_cursor로 닫습니다.

4. FETCH 및 REPEAT:
   - FETCH 명령으로 커서에서 한 행씩 데이터를 가져오고, REPEAT 및 IF NOT done을 사용해 조건에 따라 필요한 처리를 수행합니다.

장단점 분석

장점
- 유연성: 다중 행 결과 셋을 하나씩 처리할 수 있어 복잡한 비즈니스 로직에 적합.
- 가독성: 노드 기반으로 데이터를 처리하는 흐름을 명확히 보여줌.
- 변형 가능성: 각 행에 대해 원하는 데이터 조작을 손쉽게 추가 가능.

단점
- 성능 문제: 데이터가 많을 경우 커서 작업은 메모리와 성능에 부담을 줄 수 있음.
- 복잡성 증가: 간단한 작업을 위해 사용하면 오히려 코드가 복잡해질 수 있음.
- 병렬 처리 지원 부족: MySQL 커서는 기본적으로 순차적으로 행을 처리하며 병렬 작업에는 제약이 있음.

결론
MySQL의 DECLARE를 활용한 커서 사용은 데이터베이스 내에서 복잡한 다중 행 연산을 효과적으로 처리할 수 있는 도구입니다. 하지만, 커서를 잘못 사용하면 성능 문제가 나타날 수 있으므로 데이터 크기와 실행 목적에 맞게 신중히 활용해야 합니다. 커서를 사용하지 않고도 해결할 수 있는 간단한 문제라면 SQL 자체의 집계 함수나 JOIN, 서브쿼리를 고려하는 것도 좋은 선택입니다.

참고 자료
- [MySQL 공식 문서 - 커서 사용 (https://dev.mysql.com/doc/refman/8.0/en/cursors.html)]

728x90
반응형

'SQL > MYSQL' 카테고리의 다른 글

[MySQL] DECLARE CONDITION 문 사용 방법 및 예시  (0) 2025.01.06
[MySQL] 서버 사이드 커서 문 사용 방법 및 예시  (0) 2025.01.04
[MySQL] Cursor Open 문 사용 방법 및 예시  (1) 2025.01.03
[MySQL] Cursor FETCH 문 사용 방법 및 예시  (0) 2024.12.31
[MySQL] Cursor CLOSE 문 사용 방법 및 예시  (2) 2024.12.29
[MySQL] WHILE 문 사용 방법 및 예시  (1) 2024.12.28
[MySQL] RETURN 문 사용 방법 및 예시  (0) 2024.12.27
[MySQL] REPEAT 문 사용 방법 및 예시  (0) 2024.12.27
    'SQL/MYSQL' 카테고리의 다른 글
    • [MySQL] Cursor Open 문 사용 방법 및 예시
    • [MySQL] Cursor FETCH 문 사용 방법 및 예시
    • [MySQL] Cursor CLOSE 문 사용 방법 및 예시
    • [MySQL] WHILE 문 사용 방법 및 예시
    Ant_U
    Ant_U

    티스토리툴바