MySQL

스토어드 함수(Stored Function)

john_ 2023. 2. 10. 12:23
728x90

2023.02.10 - [MySQL] - 스토어드 프로시저(Stored Procedure).MySQL

 

스토어드 프로시저(Stored Procedure).MySQL

2023.02.08 - [MySQL] - 스토어드 프로시저(Procedure)를 이용한 프로그래밍.MySQL 스토어드 프로시저(Procedure)를 이용한 프로그래밍.MySQL 스토어드 프로시저를 이용한 프로그래밍 IF...ELSE 조건에 따라 분기

less-go.tistory.com

 

위 글과 관계있는 내용입니다.

 


스토어드 함수(Stored Function)

  • 사용자가 직접 만들어 사용합니다. 권한이 필요합니다.
set global log_bin_trust_function_creators = 1;
  • 스토어드 프로시저와 유사
    • 형태와 사용 용도에 있어 차이 있음
  • 스토어드 함수의 개요

-- 스토어드 함수 (Stored Function)

-- 스토어드 함수 생성 권한부여
SET GLOBAL log_bin_trust_function_creators = 0;		-- 함수 생성 권한 빼기(default)
SET GLOBAL log_bin_trust_function_creators = 1;		-- 함수 생성 권한 부여

use sqldb;
drop function if exists userfunc;

delimiter $$
create function userfunc(value1 int, value2 int)	-- 함수의 매개변수는 전부 입력
	returns int										-- 리턴값이 있으면 리턴의 타입을 지정, RETRUN'S'
begin
	return value1 + value2;
end $$
delimiter ;

select userfunc(100,200);

스토어드 함수와 스토어드 프로시저의 차이점

스토어드 함수

  • 파라미터에 IN, OUT 등을 사용할 수 없습니다
    • 모두 입력 파라미터로 사용합니다.
  • RETURNS문으로 반환할 값의 데이터 형식 지정
    • 본문 안에서는 RETURN문으로 하나의 값을 반환
  • SELECT 문장 안에서 호출
  • 함수 안에서 집합 결과를 반환하는 SELECT는 사용 불가합니다
    • SELECT...INTO...는 집합 결과를 반환하는 것이 아니므로 예외적으로 스토어드 함수에서도 사용이 가능합니다.
  • 어떤 계산을 통해서 하나의 값을 반환하는데 주로 사용합니다.

 


-- 스토어드 함수 실습 -P.455
use sqldb;

drop function if exists getAgeFunc;

delimiter $$
create function getAgeFunc(bYear int)
	returns int
begin
	declare age int;	-- 나이변수
    set age = year(curdate()) - bYear;
    return age;
end $$
delimiter ;

select getAgeFunc(2011);

select getAgeFunc(1994) into @age1994;

select getagefunc(1979) into @age1979;
select getagefunc(1997) into @age1997;
select concat('1997년과 1979년의 나이차 ==> ', (@age1997 - @age1979));

select * from usertbl;
-- function을 이용한 사용자 나이 출력
select userid, name, getagefunc(birthyear) as '만 나이' from usertbl;

-- 생성된 함수 확인
show create function getAgeFunc;

-- 함수 삭제
drop function getAgeFunc;
728x90

'MySQL' 카테고리의 다른 글

트리거(Trigger).MySQL  (0) 2023.02.10
커서(Cursor).MySQL  (0) 2023.02.10
스토어드 프로시저(Stored Procedure).MySQL  (0) 2023.02.10
인덱스 생성/ 변경 / 삭제.MySQL  (0) 2023.02.09
인덱스의 내부 작동.MySQL  (0) 2023.02.09