반응형
MySQL은 스토어드 프로시저 내부에 커서를 사용할 수 있다. 커서는 일반 프로그래밍 언어의 파일 처리와 방법이 비슷하기 때문에 행의 집합을 다루기에 편리한 많은 기능을 제공해 준다.
JSP를 통한 웹 개발을 해봤다면 사용자의 객체를 생성할 때 ResultSet 객체를 사용해 보았을 것이다.
rs.next() 메서드는 커서를 이용하여 데이터가 존재한다면 그행을 읽어 데이터를 가져오는 역할을 한다.
커서는 테이블에서 여러 개의 행을 쿼리한 후에, 쿼리의 결과인 행 집합을 한 행씩 처리하기 위한 방식이다.
한 행씩 읽을 때마다 커서 포인터는 자동으로 다음 줄을 가리키게 됩니다.
커서의 처리 순서
커서를 활용해 게시판의 조회수의 평균을 구하는 프로시저를 작성합니다.
DROP PROCEDURE IF EXISTS cursorProc;
DELIMITER $$
CREATE PROCEDURE cursorProc()
BEGIN
DECLARE noticeHit INT DEFAULT 0; --조회수
DECLARE noticeCnt INT DEFAULT 0; -- 게시글 수
DECLARE totalHit INT DEFAULT 0; -- 합계
DECLARE endOfRow BOOLEAN DEFAULT FALSE; --행의 끝여부
DECLARE noticeCursor CURSOR FOR -- 커서선언
SELECT hit from Notice;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET endOfRow = TRUE --행의 끝일때 변수에 TRUE값 대입
OPEN noticeCursor; --커서 오픈
cursor_loop: LOOP
FETCH noticeCursor INTO noticeHit; --hit 1개를 변수에 대입
IF endOfRow THEN
LEAVE cursor_loop; --읽을 행 없을때 종료
END IF;
SET noticeCnt = noticeCnt + 1;
SET totalHit = totalHit + noticeHit;
END LOOP cursor_loop; --루프종료
SELECT totalHit;
SELECT noticeHit;
SELECT noticeCnt;
SELECT CONCAT('게시판의 조회수 평균',(totalHit/noticeCnt));
CLOSE noticeCursor;
END $$
DELIMITER ;
CALL cursorProc();
반응형
'Database > MySQL' 카테고리의 다른 글
문자열을 저장할 때 CHAR, VARCHAR 선택 하기 위한 작은 팁 (0) | 2024.08.10 |
---|---|
[MySQL] 트리거 (0) | 2020.07.01 |
[MySQL] Stored Program (0) | 2020.07.01 |
MySQL DATE / TIME TYPE (0) | 2020.05.09 |
MySQL String Type (0) | 2020.05.09 |
댓글