[MySQL] 사용자함수 :: CREATE FUNCTION
반응형
- 사용자가 생성하는 함수
- 반복되는 쿼리/자주 사용되는 쿼리를 계속 작성하기 번거로우니 함수로 지정하여 호출
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
728x90
Comments