반응형
Ant_U
DBA 개미
Ant_U
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • AWS (3)
    • C# (1)
    • SQL (200)
      • MYSQL (150)
      • MSSQL (50)
    • SQLD (12)

인기 글

최근 글

250x250
hELLO · Designed By 정상우.
Ant_U

DBA 개미

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

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

2025. 1. 3. 12:20
728x90
반응형

 
소개
MySQL에서 Cursor(커서)는 저장 프로시저 또는 저장 함수 내에서 데이터의 행 집합을 순차적으로 처리하기 위해 사용되는 기능입니다. Cursor OPEN Statement는 커서를 활성화하여 데이터베이스에서 커서에 정의된 SQL 쿼리를 실행하고, 해당 결과 집합을 메모리에 로드하는 역할을 합니다. 이 게시물에서는 Cursor OPEN Statement에 대해서 무엇인지, 어떻게 사용하는지, 그리고 간단한 코드 예제를 통해 이해할 수 있도록 설명하겠습니다.

주요 특징
- 커서를 활성화: OPEN 문은 커서를 실행 상태로 변경하여 데이터 집합을 준비합니다.
- 저장 프로시저에서 사용: 커서는 일반적으로 저장 프로시저 또는 트리거 내부에서 사용됩니다.
- 순차적 데이터 처리: 한 번에 한 행씩 데이터를 처리할 수 있어 복잡한 비즈니스 로직에 유용합니다.

사용 예시
다음은 커서를 열고 데이터를 가져오는 간단한 예제입니다.

예제: employees 테이블의 데이터를 커서를 통해 처리하기
여기서는 직원 정보가 담긴 employees 테이블의 특정 속성을 반복 처리하는 프로시저를 작성해 보겠습니다.

DELIMITER //

CREATE PROCEDURE process_employees()
BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE emp_name VARCHAR(100);

    -- 커서 선언
    DECLARE emp_cursor CURSOR FOR SELECT name FROM employees;

    -- 종료 핸들러 선언
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    -- 커서 열기
    OPEN emp_cursor;

    read_loop: LOOP
        FETCH emp_cursor INTO emp_name; -- 커서에서 한 행 가져오기
        IF done THEN
            LEAVE read_loop; -- 더 이상 가져올 행이 없으면 루프 종료
        END IF;
        -- 가져온 데이터를 사용하여 비즈니스 로직 수행
        SELECT CONCAT('Processing: ', emp_name);
    END LOOP;

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

DELIMITER ;




실행 방법
1. 먼저 위 프로시저를 한 번 생성합니다.
2. 그런 다음 프로시저를 호출합니다.

CALL process_employees();


결과
각 직원의 이름이 Processing: <name> 형태로 출력됩니다.

코드 흐름 설명
1. 커서를 선언: DECLARE emp_cursor CURSOR FOR ...를 통해 employees 테이블의 데이터 집합을 정의합니다.
2. 커서 열기: OPEN emp_cursor로 커서를 활성화합니다.
3. 데이터 가져오기: FETCH emp_cursor INTO emp_name을 통해 커서에서 행을 가져옵니다.
4. 종료 핸들러: 더 이상 가져올 데이터가 없을 경우 NOT FOUND 핸들러가 done 값을 1로 설정합니다.
5. 루프 종료: done 값이 1이 되면 루프를 종료합니다.
6. 커서 닫기: 사용이 끝난 커서는 CLOSE emp_cursor로 닫아 줍니다.

장단점 분석

장점:
- 데이터 처리의 유연성: 한 번에 전체 데이터를 가져오지 않고 한 행씩 처리할 수 있어 메모리 사용을 줄입니다.
- 복잡한 로직 지원: 특정 데이터 집합에 대해 순차적인 데이터 처리가 필요한 상황에서 유용합니다.

단점:
- 성능 제약: 한 행씩 가져오기 때문에 대량 데이터를 처리할 경우 속도가 느릴 수 있습니다.
- 복잡성 증가: 프로시저 내에서 커서를 관리해야 하므로 코드가 다소 복잡해질 수 있습니다.

결론
MySQL의 Cursor OPEN Statement는 대량 데이터를 순차적으로 처리해야 하는 저장 프로시저에서 매우 유용하게 사용됩니다. 단, 성능 및 복잡성을 고려하여 적절히 사용해야 합니다. 위의 예제를 직접 실행하며 작동 원리를 이해해 보면 실무에서도 쉽게 응용할 수 있을 것입니다.

728x90
반응형

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

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

    티스토리툴바