혼자 공부하는 SQL 19강

랄라콥스·2025년 2월 27일

혼자공부하는SQL

목록 보기
11/12

스토어드 함수

개념과 형식

개념
내가 원하는 함수 만들기
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; 
profile
일단 책을 피자

0개의 댓글