[MySQL] 사용자 정의 함수

Bam·2025년 5월 2일
0

Database

목록 보기
28/39
post-thumbnail

사용자 정의 함수

MySQL에서 자주 사용하는 기능을 내장 함수로 RDBMS가 제공하고 있었습니다.

이러한 내장 함수 외에도 프로그래머가 필요하다면 직접 함수를 정의해서 사용할 수 있는 사용자 정의 함수 기능도 제공하고 있습니다.

사용자 정의 함수 정의

사용자 정의 함수CREATE FUNCTION을 통해 정의할 수 있습니다. 마찬가지로 정의하는 키워드만 다르고 내용 자체는 프로시저와 동일합니다.

DELIMITER $$

CREATE FUNCTION 함수명 
  파라미터명 타입,
  ...
) RETURNS 반환값_타입
  기타 속성들
  
BEGIN
  #사용자 정의 함수 본문
END $$

DELIMITER ;
  • 파라미터 구문 이후에 RETURNS 키워드를 넣고 반환값의 타입을 명시합니다.
  • 속성은 함수에 다양한 속성을 지정해서 함수에 대해 추가적인 동작 또는 정보를 제어합니다.
속성명설명
COMMENT '문자열'함수에 대한 설명. SHOW CREATE FUNCTION에서 설명 출력
LANGUAGE SQL 또는 LANGUAGE JAVASCRIPT루틴이 작성된 언어를 지정합니다. 기본은 SQL이며, MLE(Multilingual Engine) 설치 시 JavaScript 지원 가능.
[NOT] DETERMINISTIC동일한 입력값에 대해 항상 같은 결과를 내면 DETERMINISTIC, 그렇지 않으면 NOT DETERMINISTIC 를 사용
CONTAINS SQL / NO SQL / READS SQL DATA / MODIFIES SQL DATA함수 내 SQL문 실행 여부

SQL 문 실행 여부 키워드에 대한 설명은 다음과 같습니다.
따로 명시하지 않으면 기본값 CONTATINS SQL이 적용됩니다.

  • NO SQL: SQL문이 전혀 없음
  • CONTAINS SQL: 테이블 액세스 없는 SQL문만 있음 (기본값)
  • READS SQL DATA: SELECT 등 읽기 전용
  • MODIFIES SQL DATA: INSERT/UPDATE/DELETE 등 쓰기 포함

사용자 정의 함수 예제

입력한 숫자 데이터에 10을 곱해서 반환하는 사용자 정의 함수를 정의해보고 사용해보겠습니다.

DELIMITER $$

CREATE FUNCTION multiply_by_10(
  in_value BIGINT
) RETURNS BIGINT
  DETERMINISTIC
  NO SQL
  
BEGIN
  RETURN in_value * 10;
END $$

DELIMITER ;


만약 테이블 특정 컬럼에서 함수를 사용한 결과를 얻는다면 다음과 같이 작성합니다.

SELECT multiply_by_10(n_data)
FROM db_test.numbers_table;

0개의 댓글