본문 바로가기

[MySQL] 사용자함수 :: CREATE FUNCTION

카테고리 없음 2021. 2. 25.

반응형

- 사용자가 생성하는 함수

- 반복되는 쿼리/자주 사용되는 쿼리를 계속 작성하기 번거로우니 함수로 지정하여 호출

 

CREATE FUNCTION 함수명(parameter, 데이터타입)
    RETURNS 데이터타입 DETERMINISTIC
BEGIN
    DECLARE 변수 데이터타입;   -- 변수선언 / 세미콜론 필수
    SET 변수선언내용;   -- 변수선언 / 세미콜론 필수
    RETURN (Query) / 변수;   -- 필수 / 무엇을 내보낼 것인지(output)
END
 
----------------------------------------------------------------
SELECT 'function name'(parameter)

 

 

CREATE FUNCTION : 함수 지정

- 함수명 : 함수 이름을 무엇으로 지정할 것인지 / 엑셀 sum(x, y, z)에서 sum에 해당

- parameter : 매개변수/ 사용자가 입력할 값 / 엑셀 sum(x, y, z)에서 x, y, z에 해당

- datatype : 데이터타입 / 인자의 데이터 타입

 

RETURNS : 출력될 값(output) 지정

- 'datatype' : 데이터타입 / 내보낼 값의 데이터타입

- DETERMINISTIC : 똑같은 값을 입력한다면 항상 결과값이 같을 때 / 1:1/sum(1, 2, 3) = 6

- NOT DETERMINISTIC : 같은 값을 입력해도 결과값이 다를 때 / 1~100 사이에서 숫자뽑기

 

 

예시)

CustomerLevel(credit) : credit을 입력하면 Level을 반환하는 함수

-- 함수 CustomerLevel()
CREATE FUNCTION CustomerLevel(credit DECIMAL(10, 2))   -- parameter가 credit이고 데이터타입은 DECIMAL(10, 2) → 실수형/전체10자리/소수2자리
    RETURNS VARCHAR(20) DETERMINISTIC   -- 결과의 데이터타입 지정 VARCHAR(20) → 문자형/전체20자리
BEGIN
    DECLARE Level VARCHAR(20);   -- 변수 Level선언
    IF credit > 50000 THEN   -- IF문
        SET Level = 'PLATINUM';
    ELSEIF (credit <= 50000 AND credit >= 10000) THEN
        SET Level = 'GOLD';
    ELSEIF (credit < 10000 THEN
        SET Level = 'SILVER';
    END IF;   -- IF문 끝
    RETURN (Level);   -- 필수
END
 
----------------------------------------------------------------
SELECT CustomerLevel(creditLimit)
FROM customer

 

 

 

Reference

 

 

 

728x90

Comments