본문 바로가기

BackEnd/DB(SQL)

[DB_MySQL] 이것이 MySQL이다 ch10 스토어드 프로그램 3(커서)

728x90
반응형

1. 커서의 개요

◎ 커서(Cursor)

   ▷ 스토어드 프로시저 내부에 사용
   ▷ 일반 프로그래밍 언어의 파일 처리와 방법이 비슷함
      ▶ 행의 집합을 다루기 편리한 기능 제공
   ▷ 테이블에서 여러 개의 행을 쿼리한 후, 쿼리의 결과인 행 집합을 한 행씩 처리하기 위한 방식

 

2. 커서의 처리 순서

 

◎ 커서를 이용한 예제

-- CURSOR 커서 사용
-- 고객의 평균 키를 구하는 스토어드 프로시저

use sqldb;

drop procedure if exists cursorProc;

delimiter $$
create procedure cursorProc()
begin
	declare userHeight int;    -- 고객의 키
    declare cnt int default 0; -- 고객의 수
    declare totalHeight int default 0; -- 고객의 키 합계
    
    declare endOfRow boolean default false; -- 행의 끝인지 확인
    
    -- 커서 선언
    declare userCuror cursor for
		select height from usertbl;
        
	declare continue handler		
		for not found set endOfRow = true; -- 행의 끝이면 endOfRow 변수에 true를 대입
        
	open userCuror; -- 커서 열기
    
    cursor_loop : loop
		fetch userCuror into userHeight;  -- 고객 키를 하나씩 대입
        
        if endOfRow then  -- endOfRow 더이상 읽을 행이 없으면 loop 빠져 나오기
			leave cursor_loop;
		end if;
        
        set cnt = cnt + 1;   -- 고객 수를 누적
        set totalHeight = totalHeight + userHeight;
	end loop cursor_loop;
    
    select concat('고객의 키 평균 ==> ', (totalHeight/cnt));
    
    close userCuror; -- 커서 닫기
end $$
delimiter ;

call cursorProc();

-- 고객의 키 평균 ==> 175.8000 반환


프로시저 내부에 커서를 사용해본 예제입니다.

1. 프로시저 내부에 커서를 생성합니다.
2. 커서를 사용하면서 한 행씩 읽으며 변수에 값들을 누적합니다.
3. 마지막으로 출력해줍니다.

 

 

커서는 프로시저 내부에서 사용할 수 있고 테이블에서 여러 개의 행을 쿼리한 후, 행 집합을 한 행씩 처리하는 방법입니다.

 

프로시저를 사용할 때는 많이 사용할 것 같아요!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

728x90
반응형