//Google AdSense

사용자 정의 함수


함수의 특징

  • 내장함수가 사용자를 만족하는 모든 함수를 제공하지 않아 , 필요에 의해 사용자가 직접 함수를 만들어서 사용
  • 형태와 사용 용도에 프로시저와 차이가 있음

함수의 단점

  • 유지 보수 복잡성 증가
  • 각 기능을 담당하는 프로그램 코드가 자바와 MySQL Stored Program으로 분산되어 관리되기 때문에 애플리케이션의 설치나 배포가 더 복잡해짐.

사용자 정의 함수 vs. 프로시저

  • 파라미터 in, out 을 사용할 수 없다.
    • 함수의 파라미터는 모두 입력 파라미터로 사용된다.
  • 리턴값이 있다.
    • 프로시저는 반환하는 구문이 없지만 (out 파라미터 사용) 함수는 하나의 값을 반환해야 한다.
  • 호출이 다르다.
    • 함수는 SELECT 문장 안에서 호출된다.
  • SELECT를 사용할 수 없다.,
    • 프로시저는 SELECT를 사용할 수 있으나 함수는 집합결과를 반환하는 SELECT문을 사용할 수 없다.

사용자 함수 정의

DELIMITER $$

CREATE FUNCTION 스토어드 함수 이름(파라미터)
	RETURNS 반환형식
BEGIN
	
	프로그래밍 코딩…
	RETURN 반환값 ;

END $$
DELIMITER;

SELECT 스토어드 함수 이름();

사용자 정의 함수 실습 1

 


사용자 정의 함수 실습 2

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

BEGIN
	DECLARE resultStr VARCHAR(200);
	declare str varchar(200);
	set str = SUBSTRING(num,8,1);
	case
	when (str = '1') or (str = '3') or (str = '5') or (str = '7')  then
		set resultStr = '남자입니다.';
	when (str = '2') or (str = '4') or (str = '6') or (str = '8') then
		set resultStr = '여자입니다.';
	else 
		set resultStr = '주민등록번호가 옳지 않습니다.';
	end case;
	RETURN resultStr;
END

 

사용자 정의 함수 실습 3

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

BEGIN
	DECLARE result varchar(200);
	DECLARE subStrDate int;
	DECLARE checkS int;
	DECLARE age int;
	
	set subStrDate = SUBSTRING_INDEX(num,'-',1);
	set checkS = SUBSTR(SUBSTRING_INDEX(num,'-',-1),1,1);
	
	if(CHAR_LENGTH(num) =14) then
		case
		when checkS = 1 or checkS = 2 then
			set subStrDate = 19000000 + subStrDate;
		when checkS = 3 or checkS = 4 then
			set subStrDate = 20000000 + subStrDate;
		end case;
	
		set age = TRUNCATE(((CONVERT(REPLACE(CURRENT_DATE(),'-',''),UNSIGNED)-subStrDate)/10000),0);
		if(result = 'error') then
			set result = '잘못 입력된 값입니다.';
		else
			set result = concat('만', age , '세입니다.');
		end if;
		
	else
		set result = '입력값이 맞지 않습니다.';
	end if;
	return result;
END

+ Recent posts