[SQL 독학] 스토어드 함수와 커서 개념
2022. 7. 26. 23:46ㆍSQL
스토어드 함수
스토어드 프로시저와 비슷하지만
엄연히 다른 기능으로 SUM(), CAST(),
CONCAT(), CURRENT_DATE() 등이
여기에 해당된다. 기본 형식과 활용
예시는 아래와 같다.
# 기본 형식
DELIMITER $$
CREATE FUNCTION 스토어드_함수_이름(매개변수)
RETURNS 반환형식
BEGIN
이곳에 프로그래밍 코딩
RETURN 반환값;
END $$
DELIMITER ;
SELECT 스토어드_함수_이름();
# 예시2
DELIMITER $$
CREATE FUNCTION sumFunc(number1 INT, number2 INT)
RETURNS INT
BEGIN
RETURN number1 + number2;
END $$
DELIMITER ;
SELECT mem_id, mem_name, calcYearFunc(YEAR(debut_date)) AS '활동 햇수'
FROM member;
# 함수 삭제
DROP FUNCTION 스토어드_함수_이름;
커서(Cursor)
테이블에서 한 행씩 처리하기 위한
방식으로 첫 번째 행을 처리한 후에
마지막 행까지 한 행씩 접근해서
값을 처리한다.
커서는 일반적으로 좌측과 같은
작동 순서를 통해 처리가 된다.
커서를 이용하여 회원의 평균 인원수를
구하는 스토어드 프로시저를 작성하는
순서는 아래와 같다.
1) 사용할 변수 준비, DEFAULT문으로
초기값 0으로 설정, 행의 끝을 파악하기 위한
endOfRow 변수 준비
2) 커서 선언하기 (SELECT)
3) 반복 조건 선언하기
4) 커서 열기
5) 행 반복하기
6) 커서 닫기
DROP PROCEDURE IF EXISTS cursor_proc;
DELIMITER $$
CREATE PROCEDURE cursor_proc()
BEGIN
#step1
DECLARE memNumber INT; -- 회원의 인원수
DECLARE cnt INT DEFAULT 0; -- 읽은 행의 수
DECLARE totNumber INT DEFAULT 0; -- 인원의 합계
DECLARE endOfRow BOOLEAN DEFAULT FALSE; -- 행의 끝 여부(기본을 FALSE)
#step2
DECLARE memberCuror CURSOR FOR-- 커서 선언
SELECT mem_number FROM member;
#step3
DECLARE CONTINUE HANDLER -- 행의 끝이면 endOfRow 변수에 TRUE를 대입
FOR NOT FOUND SET endOfRow = TRUE;
#step4
OPEN memberCuror; -- 커서 열기
#step5
cursor_loop: LOOP
FETCH memberCuror INTO memNumber;
IF endOfRow THEN
LEAVE cursor_loop;
END IF;
SET cnt = cnt + 1;
SET totNumber = totNumber + memNumber;
END LOOP cursor_loop;
SELECT (totNumber/cnt) AS '회원의 평균 인원 수';
#step6
CLOSE memberCuror;
END $$
DELIMITER ;
* cursor_loop는 무한 반복 코드이기 때문에
빠져나갈 조건을 설정해주고 LEAVE로
빠져나갈 수 있도록 해주었다.
** FETCH는 한 행씩 읽어오는 것을
뜻한다. 위 코드의 경우 커서를 선언할 때
mem_number 행을 조회했으므로
memNumber 변수에는 각 회원의 인원수가
한 번에 하나씩 저장된다.
'SQL' 카테고리의 다른 글
[SQL 독학] Python과 MySQL 연동하기 (0) | 2022.07.28 |
---|---|
[SQL 독학] 트리거(trigger) (0) | 2022.07.27 |
[SQL 독학] 스토어드 프로시저의 개념과 사용법 (0) | 2022.07.26 |
[SQL 독학] 인덱스 생성/제거 문법 (0) | 2022.07.25 |
[SQL 독학] 인덱스 내부 작동 원리와 구조, 데이터 검색 (0) | 2022.07.25 |