1. 스토어드 함수 (Stored Function)
▷ 사용자가 직접 만들어서 사용하는 함수
▷ 스토어드 프로시저와 유사
▶ 형태와 사용 용도에 있어 차이 있음
▷ 스토어드 함수의 개요
2. 스토어드 함수와 스토어드 프로시저의 차이점
◎ 스토어드 함수
▷ 파라미터에 IN, OUT 등을 사용할 수 없음
▶ 모두 입력 파라미터로 사용
▷ RETURNS문으로 반환할 값의 데이터 형식 지정
▶ 본문 안에서는 RETURN문으로 하나의 값 반환
▷ SELECT 문장 안에서 호출
▷ 함수 안에서 집합 결과 반환하는 SELECT 사용 불가
▶ SELECT… INTO… 는 집합 결과 반환하는 것이 아니므로 예외적으로 스토어드 함수에서 사용 가능
▷ 어떤 계산 통해서 하나의 값 반환하는데 주로 사용
◎ 스토어드 프로시저
▷ 파라미터에 IN, OUT 등을 사용 가능
▷ 별도의 반환하는 구문이 없음
▶ 필요하다면 여러 개의 OUT 파라미터 사용해서 값 반환 가능
▷ CALL로 호출
▷ 스토어드 프로시저 안에 SELECT문 사용 가능
▷ 여러 SQL문이나 숫자 계산 등의 다양한 용도로 사용
◎ 스토어드 함수
▷ 스토어드 함수를 사용하기 위해서는 스토어드 함수 생성 권한을 허용 해야함
▷ ex) 2개의 숫자의 합계를 계산하는 스토어드 함수
◎ 보안 강화 예제
drop procedure if exists delivProc; delimiter $$ create procedure delivProc( in id varchar(10) ) begin select userID, name, addr, mobile1, mobile2 from userTbl where userID = id; end $$ delimiter ; call delivProc ('LJB');
배송 담당자가 표시됩니다.
◎ 쿼리문으로 스토어드 함수 생성 권한 허용 예시
-- 쿼리문으로 스토어드 함수 생성 권한 허용 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 begin return value1 + value2; end $$ delimiter ; select userFunc(100, 200); -- 300 반환
◎ 나이 차이 출력 예시
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(1979); -- 44 반환 select getAgeFunc(1997); -- 26 반환 select getAgeFunc(1979) into @age1979; select getAgeFunc(1997) into @age1989; select concat('1997년과 1979년의 나이차 ==> ', (@age1979-@age1989)); -- 1997년과 1979년의 나이차 ==> 18 반환
◎ 함수에 사용되는 추가 예제select * from usertbl; -- 테이블 조회 select userID, name, getAgeFunc(birthYear) as '만 나이' from usertbl; -- 스토어드 함수의 내용 확인 show create function getAgeFunc; -- drop문 사용 drop function getAgeFunc;
스토어드 함수에 대해서 공부해 보았습니다.
스토어드 프로시저와는 사용하는 방식이 달라서 구분해야 하겠네요!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

'BackEnd > DB(SQL)' 카테고리의 다른 글
[DB_MySQL] 이것이 MySQL이다 ch10 스토어드 프로그램 4(트리거, trigger) (0) | 2023.02.12 |
---|---|
[DB_MySQL] 이것이 MySQL이다 ch10 스토어드 프로그램 3(커서) (0) | 2023.02.12 |
[DB_MySQL] 이것이 MySQL이다 ch10 스토어드 프로그램 1(스토어드 프로시저, Stored Procedure) (0) | 2023.02.10 |
[DB_MySQL] 이것이 MySQL이다 ch09 인덱스 1(클러스터형 인덱스, 보조 인덱스) (0) | 2023.02.09 |
[DB_MySQL] 이것이 MySQL이다 ch08 테이블과 뷰 3(테이블스페이스) (0) | 2023.02.09 |