소개
MySQL에서 Cursor는 결과 집합(Row)을 한 행씩 처리할 수 있게 해주는 유용한 도구입니다. 그러나 Cursor를 사용한 후에는 명시적으로 닫아주는 것이 필수적입니다. 이를 위해 사용되는 명령문이 바로 CLOSE Statement입니다. Cursor를 CLOSE하지 않으면 시스템 자원을 낭비할 수 있습니다. 이 글에서는 Cursor를 닫는 방법인 CLOSE Statement의 역할과 사용 예제를 다룹니다.
주요 특징
- Cursor 연결 해제:
CLOSE는 이전에 DECLARE로 정의된 Cursor를 명시적으로 닫아줍니다.
- 필수 구문:
Cursor는 사용 후 반드시 닫아야 합니다. 닫지 않으면 자원을 계속 할당한 상태로 남겨두게 됩니다.
- 한 번만 실행 가능:
Cursor를 닫은 후 다시 사용하는 것은 불가능합니다. 필요하면 새로 Cursor를 선언해야 합니다.
사용 예시
Cursor를 열고 데이터를 처리한 후, 자원을 해제하기 위해 CLOSE를 사용하는 간단한 예제를 보겠습니다.
예시 코드:
DELIMITER //
CREATE PROCEDURE ProcessCustomers()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE customerName VARCHAR(100);
-- Cursor 선언
DECLARE customerCursor CURSOR FOR
SELECT name FROM customers;
-- 핸들러 선언
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- Cursor 열기
OPEN customerCursor;
read_loop: LOOP
FETCH customerCursor INTO customerName;
-- 데이터가 없으면 루프 종료
IF done = 1 THEN
LEAVE read_loop;
END IF;
-- 작업 수행 (예: 고객 이름 출력)
SELECT customerName;
END LOOP;
-- Cursor 닫기
CLOSE customerCursor;
END//
DELIMITER ;
실행 순서 설명:
1. Cursor 선언:
- customerCursor라는 이름의 Cursor를 선언해 customers 테이블의 name 컬럼에서 데이터를 가져옵니다.
2. Cursor 열기 (OPEN):
- Cursor를 열어 결과 집합을 준비합니다.
3. 반복문 내 데이터 처리:
- FETCH 명령문으로 Cursor에서 한 행씩 데이터를 가져옵니다.
- 가져온 데이터를 변수 customerName에 저장하고 출력합니다.
- 더 이상 데이터가 없으면 핸들러에 의해 done 플래그가 설정되고 루프를 종료합니다.
4. Cursor 닫기 (CLOSE):
- 루프가 끝나면 CLOSE를 호출해 Cursor를 닫습니다.
실행 결과:
만약 customers 테이블에 세 명의 고객 데이터가 있다고 가정하면, 실행 시 다음과 같은 출력이 표시됩니다:
+-+
| customerName |
+-+
| Alice |
| Bob |
| Charlie |
+-+
장단점 분석
장점:
- 효율적인 자원 관리:
Cursor를 닫으면 시스템 자원을 해제하여 성능 문제를 방지할 수 있습니다.
- 명확한 종료 처리:
CLOSE 명령문 덕분에 Cursor의 라이프사이클을 명확하게 관리할 수 있습니다.
단점:
- 반드시 명시적 호출 필요:
Cursor를 사용한 후 CLOSE를 호출하지 않을 경우 실행 환경에 문제가 발생할 수 있습니다.
- 사용 후 재활용 불가:
닫힌 Cursor는 다시 열 수 없으며, 필요 시 반드시 새로 선언해야 합니다.
결론
MySQL에서 Cursor를 닫기 위한 CLOSE Statement는 안정적이고 효율적인 데이터베이스 관리에 필수적입니다. 데이터 반복 작업을 수행한 뒤 자원을 반드시 해제하여 시스템 성능에 불필요한 부담을 주지 않도록 해야 합니다. Cursor를 사용할 때는 항상 CLOSE 명령문을 통해 책임감 있게 자원 관리를 실천하세요.
참고 자료
- [MySQL 공식 문서 - Cursor Statements](https://dev.mysql.com/doc/refman/8.0/en/cursors.html)
'SQL > MYSQL' 카테고리의 다른 글
[MySQL] Cursor Open 문 사용 방법 및 예시 (0) | 2025.01.03 |
---|---|
[MySQL] Cursor FETCH 문 사용 방법 및 예시 (0) | 2024.12.31 |
[MySQL] Cursor DECLARE 문 사용 방법 및 예시시 (0) | 2024.12.30 |
[MySQL] WHILE 문 사용 방법 및 예시 (1) | 2024.12.28 |
[MySQL] RETURN 문 사용 방법 및 예시 (0) | 2024.12.27 |
[MySQL] REPEAT 문 사용 방법 및 예시 (0) | 2024.12.27 |
[MySQL] LOOP 문 사용 방법 및 예시 (0) | 2024.12.26 |
[MySQL] LEAVE 문 사용 방법 및 예시 (0) | 2024.12.26 |