본문 바로가기

BackEnd/DB(SQL)

[DB_MySQL] 이것이 MySQL이다 ch10 스토어드 프로그램 2(스토어드 함수)

728x90
반응형

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;

 

스토어드 함수에 대해서 공부해 보았습니다.
스토어드 프로시저와는 사용하는 방식이 달라서 구분해야 하겠네요!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형