지난 포스팅에서 스토어드 프로시저(Stored Procedure)에 대해 살펴보았는데요, 이번 포스팅에서는 스토어드 함수(Stored Function)에 대해 알아보도록 하겠습니다.
스토어드 함수 (Stored Function)
MySQL이 사용자가 원하는 함수를 전부 제공하지 않기 때문에, 필요에 따라 직접 만들어서 사용하는 함수를 스토어드 함수라고 합니다.
[ 선언 방법 ]
DELIMITER $$
CREATE FUNCTION function_name(parameter)
RETURNS 반환타입
BEGIN
statements
END $$
DELIMITER;
[ 호출 방법 ]
SELECT function_name();
[ 삭제 방법 ]
DROP FUNCTION function_name;
여기까지만 살펴보면, 사실 스토어드 프로시저랑 다를 바가 없을거 같은데.. 뭐가 다른걸까요 ?
(스토어드 프로시저가 뭔지 잘 모르겠거나 기억나지 않는다면 ?..)
더보기
해당 글을 참고하세요 !
[ 스토어드 함수의 특징 ]
- 스토어드 프로시저와 달리 OUT,INOUT 같은 파라미터는 사용이 불가하며 모두 입력 파라미터로만 사용됩니다.
- RETURNS 문으로 하나의 값을 반환해야 합니다. (리턴값은 DETERMINISTIC or Non DETERMINISTIC)
- 프로시저는 CALL로 호출하지만, 스토어드 함수는 SELECT 문장 내에서 호출됩니다.
- 프로시저안에는 SELECT를 사용할 수 있지만, 스토어드 함수는 집합 결과를 반환하는 SELECT 사용이 불가합니다.
- SELECT ... INTO ... 는 집합 결과를 반환하는 것이 아니므로 예외적으로 사용이 가능해요.
- 프로시저는 여러 SQL 문장, 숫자 계산 등 다양한 용도로 사용됩니다.
- 함수는 어떤 계산을 통해 하나의 값을 반환하는데 주로 사용됩니다.
예제
DELIMITER $$
CREATE FUNCTION member_age_type(age int)
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
DECLARE age_type VARCHAR(20)
IF age < 10
SET age_type = 'Children'
ELSEIF age BETWEEN 10 AND 19 AND
SET age_type = 'Teenager'
ELSEIF age >= 20
SET age_type = 'Adult'
END IF;
RETURN (age_type);
END $$
위 예제는, 파라미터로 age 값을 넘기고 해당 age의 범주에 위치하는 문자열을 리턴해주는 함수입니다.
호출은 다음과 같이 진행하면 됩니다 !
SELECT name, age, member_age_type(age)
FROM member;
< 참고 자료 >