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 |