본문 바로가기
SQL/MySQL

MySQL 함수(Function) 만들기부터 조회까지 정리글

by wakestand 2021. 1. 25.
반응형

MySQL에서 함수는

MySQL Workbench 왼쪽의 Functions 우클릭 후

Create Function을 눌러 만들 수 있는데

함수를 작성하기에 앞서 아래 글을 보고

함수 생성과 실행 권한을 줘야한다

 

MySQL 함수 프로시저 생성 변경 불가능한 현상 해결방법

MySQL에서 프로시저(Procedure) 함수(Function) 등을 만드는 경우 ERROR 1418: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging..

wakestand.tistory.com

함수는 파라미터를 받아 쿼리를 수행한 뒤

특정 값을 반환하는 것이 주 목적인데

 

실제 업무에서 가장 많이 볼 수 있는 함수는

사번을 넣으면 이름, 부서, 회사, 국가등을

반환하는 함수가 되겠다

 

함수는 다음과 같은 구조로 이루어져 있는데

 

CREATE FUNCTION '함수명' (
파라미터
) RETURNS 반환할 데이터타입
BEGIN
	수행할 쿼리
	RETURN 반환할 값
END

먼저 파라미터는 함수 호출 시 넣어줄 값을 말하는데

함수에서 사용할 이름과 데이터 타입을 넣어주면 된다

 

다음으로 RETURNS 에는

어느 데이터타입으로 반환할지 써주면 되고

 

BEGIN 하단에는 수행할 쿼리를 작성하는데

변수를 선언할 때는

DECLARE 변수명 데이터타입(크기);

이렇게 작성해주면 되고

 

변수에 값을 넣을 때에는

SET 변수명 = 값

혹은

SELECT 컬럼 INTO 변수명

이렇게 넣어줘야 하는데 함수에서 조회한 컬럼은

'모두' 변수안에 넣어줘야 한다

 

마지막으로 RETURN 값;

을 통해 함수를 호출했을 시

반환할 리턴값을 입력해주면 된다

 

한번 위 스크린샷 함수의 내용을 쭉 보자면

VARCHAR 타입의 NAME, INTEGER 타입의 AGE를 받은 후

CONCAT으로 NAME 파라미터 뒤에 IS를 붙인 뒤

NAME_TITLE 변수에 넣고

 

AGE가 30이 넘으면 OLD, 아니면 YOUNG을

AGE_TITLE 변수에 넣어준 뒤에

마지막으로 RETURN_VALUE 변수에

NAME_TITLE, AGE_TITLE의 값을 넣어준 뒤

반환하는 구조가 되겠다

 

함수를 작성한 후에는

우측 하단의 Apply 버튼을 눌러 저장할 수 있고

 

작성한 함수 실행 시에는

SELECT 함수명(파라미터); 를 통해 호출할 수 있다 

 

마지막으로 작성한 함수는 언제든지 우클릭 후

Drop Function을 통해 삭제해줄 수 있다

 

마지막으로 예제에 사용한 함수 작성 쿼리는 아래와 같다

 

CREATE FUNCTION `GET_NAME`(
    NAME VARCHAR(20)
    , AGE INTEGER -- 파라미터 선언
) RETURNS varchar(20) -- 반환할 데이터타입
BEGIN
    DECLARE AGE_TITLE VARCHAR(20);
    DECLARE NAME_TITLE VARCHAR(20);
    DECLARE RETURN_VALUE VARCHAR(20); -- 변수 선언
    
    SELECT CONCAT(NAME, ' IS ') 
      INTO NAME_TITLE; -- 조회한 컬럼은 INTO로 변수에 넣어야 함
    
    IF(AGE > 30) THEN
    	SET AGE_TITLE = 'OLD'; -- 값 할당
    ELSE
    	SET AGE_TITLE = 'YOUNG';
    END IF;
    
    SET RETURN_VALUE = CONCAT(NAME_TITLE, AGE_TITLE);

    RETURN RETURN_VALUE;
END

 

반응형

댓글