[SQL] 함수(Function) 만들기부터 조회까지

Suhyeon Lee·2025년 1월 17일
0

자기주도학습

목록 보기
83/83

출처

MySQL 함수

프로시저 생성 변경 설정

  • MySQL에서 함수는 MySQL Workbench 왼쪽의 Functions 우클릭 후 Create Function을 눌러 만들 수 있음

  • 함수 작성 전 함수 생성과 실행 권한이 필요함

    • MySQL에서 프로시저(Procedure) 함수(Function) 등을 만드는 경우 기본적으로 함수와 프로시저를 생성할 수 없도록 설정이 되어 있기 때문
      • SHOW GLOBAL VARIABLES LIKE 'LOG_BIN_TRUST_FUNCTION_CREATORS'; 쿼리를 돌려 보면 확인 가능
      • LOG_BIN_TRUST_FUNCTION_CREATORS 값이 OFF로 되어 있으면 권한이 없어서 함수와 프로시저를 생성하지 못함
  • SET GLOBAL LOG_BIN_TRUST_FUNCTION_CREATORS = 1; 를 수행해서 Value를 ON으로 만들어 주면 정상적으로 함수와 프로시저를 생성할 수 있음

함수의 주 목적

  • 파라미터를 받아 쿼리를 수행한 뒤 특정 값을 반환
  • 실제 업무에서 가장 많이 볼 수 있는 함수:
    • 사번을 넣으면 이름, 부서, 회사, 국가 등을 반환하는 함수

함수의 구조

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
profile
2 B R 0 2 B

0개의 댓글

관련 채용 정보