반응형
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 개미

SQL/MYSQL

[MYSQL] 커서 사용 방법

2023. 6. 15. 18:22
728x90
반응형

MySQL에서 커서(Cursor)는 데이터베이스 질의 결과를 순회하고 조작하기 위한 개체입니다. 

커서를 사용하면 쿼리 결과 집합을 하나씩 가져와서 처리할 수 있으며, 데이터베이스 로직을 더욱 유연하게 작성할 수 있습니다. 

다음은 MySQL 커서에 대한 자세한 설명과 예시입니다:

1. 커서의 개념:
   - 커서는 결과 집합에 대한 포인터 또는 인덱스로 볼 수 있습니다. 

     커서를 사용하여 결과 집합을 순회하고 특정 레코드를 선택하고 조작할 수 있습니다.

2. 커서의 사용 단계:
   - 커서를 사용하는 과정은 다음과 같습니다:
     1) 커서를 선언합니다.
     2) 커서에 결과 집합을 연결합니다.
     3) 커서를 열고 결과 집합을 가져옵니다.
     4) 커서를 사용하여 결과 집합을 순회하고 조작합니다.
     5) 커서를 닫고 자원을 해제합니다.

3. 커서의 종류:
   - MySQL에서는 선언적 커서(DECLARE CURSOR)와 핸들러 커서(HANDLER) 두 가지 종류의 커서를 지원합니다. 

     선언적 커서는 결과 집합 전체를 가져오고, 핸들러 커서는 결과 집합을 순회하면서 한 번에 하나의 레코드를 처리합니다.

4. 예시:
   - 다음은 주문 테이블에서 특정 고객의 주문 목록을 조회하는 커서를 사용하는 예시입니다:

DELIMITER //

CREATE PROCEDURE GetCustomerOrders(IN customerId INT)
BEGIN
    DECLARE orderId INT;
    DECLARE orderDate DATE;
    
    -- 커서 선언
    DECLARE curOrders CURSOR FOR
    SELECT id, order_date FROM orders WHERE customer_id = customerId;

    -- 커서에 결과 집합 연결
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finished = TRUE;

    -- 커서 열기
    OPEN curOrders;

    -- 커서 사용하여 결과 집합 순회
    read_loop: LOOP
        -- 결과 집합에서 레코드 가져오기
        FETCH curOrders INTO orderId, orderDate;
        
        -- 더 이상 결과가 없으면 반복문 종료
        IF @finished THEN
            LEAVE read_loop;
        END IF;

        -- 가져온 레코드 사용하여 작업 수행
        -- 예시: 주문 정보 출력
        SELECT CONCAT('Order ID:', orderId, ', Order Date:', orderDate);

    END LOOP read_loop;

    -- 커서 닫기
    CLOSE curOrders;

END //

DELIMITER ;


위의 예시에서는 `GetCustomerOrders`라는 스토어드 프로시저를 생성합니다.

이 프로시저는 `customerId`라는 입력 파라미터를 받아 해당 고객의 주문 목록을 조회하는 커서를 사용합니다. 

커서는 `curOrders`라는 이름으로 선언되며, `orders` 테이블에서 고객 ID에 해당하는 주문 ID와 주문 날짜를 가져옵니다. 

결과 집합을 순회하면서 각 주문 정보를 출력합니다.

커서를 사용하면 데이터베이스 결과 집합을 효율적으로 처리할 수 있습니다. 

커서를 사용하면 특정 레코드를 선택하거나 조작하는 등의 작업을 수행할 수 있으며, 데이터베이스 로직을 더욱 유연하게 작성할 수 있습니다.

728x90
반응형

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

[MYSQL] 웹 사이트 개발 환경 구축에 대해  (0) 2023.06.27
[MYSQL] 파티션  (0) 2023.06.27
[MYSQL] 전체 텍스트 검색 방법  (0) 2023.06.19
[MYSQL] 트리거 사용 방법  (0) 2023.06.15
[MYSQL] 스토어드 함수 사용 방법  (0) 2023.06.15
[MYSQL] 스토어드 프로시저 사용 방법  (0) 2023.06.15
[MYSQL] 인덱스가 필요한 경우와 필요 없는 경우  (0) 2023.06.15
[MYSQL] 인덱스의 성능 비교하기  (0) 2023.06.15
    'SQL/MYSQL' 카테고리의 다른 글
    • [MYSQL] 전체 텍스트 검색 방법
    • [MYSQL] 트리거 사용 방법
    • [MYSQL] 스토어드 함수 사용 방법
    • [MYSQL] 스토어드 프로시저 사용 방법
    Ant_U
    Ant_U

    티스토리툴바