스토어드 프로시저와 비슷하지만 사용방법과 용도가 조금 다르다.
스토어드 함수의 개념과 형식
사용자가 직접 만들어서 사용하는 함수를 스토어드 함수(stored function)이라고 한다.
작성 방식
delimiter $$
create function 스토어드_함수_이름(매개변수)
returns 반환타입
begin
프로그래밍 코딩
return 반환값;
end $$
delimiter ;
select 스토어드_함수_이름();
스토어드 함수와 스토어드 프로시저의 차이점
스토어드 함수는 returns로 반환값의 데이터 형식을 지정하고, 본문 안에서 return으로 하나의 값을 반환해야한다.
스토어드 함수의 매개변수는 모두 입력 매개변수이며, in을 붙이지 않는다.
스토어드 프로시저는 call로 호출하지만 스토어드 함수는 select로 호출한다.
스토어드 프로시저 안에서는 select문을 사용할 수 있지만, 스토어드 함수는 select를 사용할 수 없다.
스토어드 프러시저는 여러 sql문이나 숫자 계산 등의 다양한 용도로 사용하지만, 스토어드 함수는 어떤 계산을 통해서 하나의 값을 반환하는데 주로 사용한다.
스토어드 함수를 사용하기 위해서는 먼저 스토어드 함수 생성 권한을 줘야 한다.
set global log_bin_trust_function_creators = 1;
스토어드 함수의 사용
숫자 2개의 합계를 저장하는 스토어드 함수 만들기
drop function if exists sumFunc;
delimiter $$
create function sumFunc(number1 int, number2 int) -- 2개의 정수형 매개변수를 전달받음
returns int -- 반환 데이터의 형식을 정수로 지정
begin
return number1 + number2; -- 정수형 결과를 반환
end $$
delimiter ;
select sumFunc(100, 200) as '합계'; -- select문에서 호출하면서 개의 매개변수를 전달
데뷔 연도를 입력하면 활동기간이 얼마나 오래 되었는지 출력해주는 함수 만들기
drop function if exists calcYearFunc;
delimiter $$
create function calcYearFunc(debutYear int)
returns int
begin
return year(curdate()) - debutYear;
end $$
delimiter ;
select concat(calcYearFunc(2023), "년") as "활동 기간";
함수의 반환 값을 select ~ into ~ 로 저장했다가 사용할 수 있다.
select calcYearFunc(2007) into @debut2007;
select calcYearFunc(2013) into @debut2013;
select @debut2007 - @debut2013 as '2007과 2013의 차이';
스토어드 함수 삭제
drop function calcYearFunc;