본문 바로가기
데이터 베이스/MySQL

MYSQL 스토어드 함수 예제&문제 14

by 인생여희 2016. 12. 16.
반응형


스토어드 함수 

사용자가 직접 만들어서 사용하는 함수를 스토어드 함수라고 한다.


개요


DELIMITER $$

CREATE FUNCTION NAME (PARAMETER)

RETURNS 반환값; 


BEGIN


이 부분에 프로그래밍 코딩 ;

RETURN 반환값;


END $$

DELIMITER;


SELECT NAME();



- 스토어드 함수는 프로시저와 달리 IN OUT 을 사용할수 없다. 

- 스토어드 함수의 파라미터는 모두 입력 파라미터로 사용된다. 


- 스토어드 함수는 RETURNS문으로 반환할 값의 데이터 형식을 지정하고, 본문 안에서는 RETURN 문으로 하나의 값을 반환 해야 한다. 스토어드 프로시저는 별도의 반환하는 구문이 없고 OUT 파라미터를 이용해서 값을 반환 할 수 있다. 


- 스토어드 프로시저는 CALL 로 호출하지만 스토어드 함수는 SELECT 문장 안에서 호출된다. 


- 스토어드 프로시저 안에는 SELECT 문을 사용할 수 있지만 , 스토어드 함수 안에서는 

집합 결과를 반환하는 SELECT 를 사용할 수 없다. 


SELECT - INTO 는 집합 결과를 반환 하는 것이 아니므로 예외적으로  스토어드 함수에서 

사용할 수 있다. 


- 스토어드 프로시저는 여러 SQL문이나 숫자 계산 등의 다양한 용도로 사용되지만 스토어드 함수는 어떤 계산을 통해서 하나의 값을 반환 하는데 주로 사용된다. 



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);




-- SELECT AGE 


drop function if EXISTS AGE;


DELIMITER $$

CREATE FUNCTION AGE(VALUE1 INT)

RETURNS INT


BEGIN

DECLARE age INT;

    SET age = YEAR(curdate())- VALUE1;

    RETURN age;

    

END $$

DELIMITER ;



SELECT AGE(1988);



-- HUAL YONG


SELECT AGE(1988) INTO @AGE1988;


SELECT AGE(1990) INTO @AGE1990;


SELECT concat('1988-1990===>',(@AGE1988-@AGE1990));


-- 

반응형

댓글