개념
내가 원하는 함수 만들기
SUM(), CAST(), CONCAT() 등등 말고
생성 형식
DELIMITER $$
CREATE FUNCTION 스토어드_함수_이름(매개변수)
RETURNS 반환 형식
BEGIN
--프로그래밍 코딩
RETURN 반환값;
END $$
DELIMITER;
SELECT 스토어드_함수_이름();
CREATE FUNCTION 스토어드함수_이름(매개변수)
매개변수는 모두 입력 매개변수임
출력 매개변수는
RETURNS 반환 형식
RETURN 반환값
여기서~~
CALL 아닌 SELECT로 호출됨!
삭제
DROP FUNCTION 함수이름;
DELIMITER $$
CREATE FUNCTION calcYearFunc(dYear INT)
RETURNS INT
BEGIN
DECLARE runYear INT; -- 활동기간(연도)
SET runYear = YEAR(CURDATE()) - dYear;
RETURN runYear;
END $$
DELIMITER ;
활동 햇수 구하는 함수
SELECT calcYearFunc(2007) INTO @debut2007;
SELECT calcYearFunc(2013) INTO @debut2013;
SELECT @debut2007-@debut2013 AS '2007과 2013 차이' ;
이런식으로 활용 가능
SELECT mem_id, mem_name, calcYearFunc(YEAR(debut_date)) AS '활동 햇수'
FROM member;
이런식으로 쿼리안의 결과로 더 많이 사용함!!
커서는 테이블에서 한 행씩 처리하기 위한 방식

이러한 과정이 필요함
DECLARE memNumber INT; -- 회원의 인원수
DECLARE cnt INT DEFAULT 0; -- 읽은 행의 수
DECLARE totNumber INT DEFAULT 0; -- 인원의 합계
DECLARE endOfRow BOOLEAN DEFAULT FALSE; -- 행의 끝 여부(기본을 FALSE)
DECLARE memberCuror CURSOR FOR-- 커서 선언
SELECT mem_number FROM member;
DECLARE CONTINUE HANDLER -- 행의 끝이면 endOfRow 변수에 TRUE를 대입
FOR NOT FOUND SET endOfRow = TRUE;
OPEN memberCuror; -- 커서 열기
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;
IF endOfRow THEN
LEAVE cursor_loop;
END IF;
=> 종료 조건
FETCH: 한 행 씩 접근함
FETCH memberCuror INTO memNumber;
한행씩 멤버수 저장함
계속 이렇게 멤버수 누적을 하게 됨
CLOSE memberCuror;