Database/SQL

MySQL - 스토어드 함수

JaeHoney 2020. 12. 29. 15:09

스토어드 함수는?

DELIMITER $$
CREATE FUNCTION 스토어드 함수명(파라미터명)
    RETURNS 반환 자료형
BEGIN
    .. 프로그래밍 코딩
    RETURN 반환값;
    
END $$
DELIMITER ;

--

SELECT 스토어드 함수명(); 

기본적인 스토어드 함수의 형식입니다. 스토어드 함수는 스토어드 프로시저랑 상당히 유사하며 아래는 차이점입니다.

  • 파라미터에 IN, OUT 등을 사용할 수 없고, 모두 입력 파라미터로 사용된다.
  • RETURNS로 반환할 값의 데이터 형식을 지정해주고, BEGIN에서 하나의 값을 반환해야 한다.
  • 프로시저는 CALL로 호출하고, 스토어드 함수는 SELECT 문장에서 호출한다.
  • 스토어드 함수안에서는 SELECT(조회)할 수 없다. - SELECT INTO는 조회가 아니므로 예외
  • 스토어드 함수는 어떤 로직이나 계산을 통해 하나의 값을 반환하는 데 많이 사용된다.

 

스토어드 함수 생성, 사용, 조회, 삭제

USE userDB;
DROP FUNCTION IF EXISTS getAge;
DELIMITER $$
CREATE FUNCTION getAgeFunc(birthYear INT)
    RETURNS INT
BEGIN
    DECLARE age INT
    SET age = YEAR(CURDATE()) - bYear;
    RETURN age;
END $$
DELIMITER ;

기본적인 예시로 출생년도를 입력하면 나이가 출력되는 스토어드 함수입니다.

SELECT getAgeFunc(1979);

SELECT문으로 호출할 수 있는데, 이를 이용해서 얻은 값을 INSERT할 수도 있을 것입니다.

SELECT userName, getAgeFunc(birthYear) AS '나이' FROM userTable

테이블에 나이는 없고, 출생년도만 있는 테이블에서도, 사용자들의 이름과 나이를 간편하게 조회할 수 있습니다.

 

SHOW CREATE FUNCTION 스토어드 함수명;

저장된 스토어드 함수의 내용을 확인할 땐 SHOW CREATE FUNCTION을 사용합니다.

DROP FUNCTION 스토어드 함수명;

저장된 스토어드 함수를 삭제할 땐 DROP FUNCTION을 사용합니다.