본문 바로가기

데이터베이스

Stored Function (함수)

  함수

내장함수가 사용자를 만족하는 모든 함수를 제공하지 않기 때문에 필요에 의해 사용자가 직접 함수를 만들어서 사용하기 위한 것이다. 형태와 사용 용도에 프로시저와는 차이가 있다.

 

▶ 사용자 정의 함수의 단점

유지 보수 복잡성 증가
 - 애플리케이션의 설치나 배포가 더 복잡해진다.

각 기능을 담당하는 프로그램 코드가 자바와 MySQL 스토어드 프로그램으로 분산되어 관리하기 때문이다.

 

▶ 함수와 프로시저의 차이

  사용자 정의 함수 프로시저
파라미터 모두 입력 파라미터로 사용된다.  
리턴값 하나의 값을 반환해야 한다. 반환하는 구문이 없다.
호출 DML의 문장 안에서 사용해야 한다. CALL로 실행.호출
DML SELECT 문장이 없고 순수 변수와 알고리즘 로직 뿐이다. SELECT 문장이 있다.

 

▶ 사용자 정의 함수의 형식 정의

 - 사용자 정의 함수의 문법

프로시저와 마찬가지로 사용하며, return 반환값이 있다.

 

- HeidiSQL에서 사용자 정의 함수 사용

 ☞ 사용자정의함수생성

프로시저와 동일하게 (데이터베이스 우클릭 - 새로 생성 - 저장루틴) 클릭시 stored program 사용이 가능하다. 유형부분에서 함수를 선택하고, 반환값에 타입을 이력해준 후 루틴 본문의 BEGIN ~ END 사이에 작성하면 된다. 입력값 또한 프로시저와 동일하게 매개변수 탭에서 지정할 수 있다.

 

 ☞ 사용자정의함수 호출

쿼리에서 호출하여 사용할 째 select 문장으로 호출하고 값을 입력해 준다.

 


  사용자 정의 함수 실습

더보기

1. 주민 등록 번호를 입력받아 성별을 조회하는 함수를 호출하시오.

BEGIN
	DECLARE convertStr VARCHAR(50);
	DECLARE resultStr VARCHAR(50);
	set convertStr = substring(Param1,8,1);
		case
		when convertStr = '1' or convertStr = '3'
			then set resultStr = '남자입니다';
		when convertStr = '2' or convertStr = '4'
			then set resultStr = '여자입니다';
		else
			set resultStr = '잘못된 값 입니다';
		end case;
		return resultStr;
END

 

2. 주민 등록 번호를 입력받아 만 나이를 조회하는 함수를 호출하시오.

BEGIN
	declare resultValue varchar(100);
	declare subStrDate int;
	declare checkS int;
	declare age int;
	
	set subStrDate = SUBSTRING_INDEX(jumin,'-',1);
	set checkS = SUBSTR(SUBSTRING_INDEX(jumin,'-',-1),1,1);
	
	if(CHAR_LENGTH(jumin) = 14) then
		case
			when checkS = 1 then set subStrDate = 19000000 + subStrDate;
			when checkS = 2 then set subStrDate = 19000000 + subStrDate;
			when checkS = 3 then set subStrDate = 20000000 + subStrDate;
			when checkS = 4 then set subStrDate = 20000000 + subStrDate;
		else set resultValue = 'error';
		end case;
		
		SET age = TRUNCATE(((convert(replace(CURRENT_DATE(),'-',''),unsigned) -
        subStrDate)/10000),0);
		if(resultValue = 'error') then
			set resultValue = '잘못 입력된 값입니다.';
		else
			set resultValue = concat('만',age,'세입니다.');
		end if;
	else
		set resultValue = '입력값이 맞지않습니다';
	end if;
	return resultValue;
END

 

 

 

'데이터베이스' 카테고리의 다른 글

Transction(트랜잭션)  (0) 2020.04.21
Stored trigger (트리거)  (0) 2020.04.20
Stored Procedure (프로시저)  (0) 2020.04.13
Stored Program  (0) 2020.04.13
View(뷰)  (0) 2020.04.06