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;