Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 쿼리에서 사용할 수 있는 사용자 정의 함수 작성 방법

네, MySQL에서는 자신만의 사용자 정의 함수(User Defined Function)를 작성하여 쿼리 안에서 직접 호출할 수 있습니다. 반복적으로 사용하는 로직을 함수로 만들어 두면 코드의 재사용성과 가독성이 크게 향상됩니다.

MySQL 함수 생성 기본 문법

DELIMITER //
CREATE FUNCTION yourFunctionName(optional parameters) RETURNS yourDataType
DETERMINISTIC NO SQL
BEGIN
yourStatements1
.
.
.
N
END
//
DELIMITER ;

위 문법에서 CREATE FUNCTION 구문을 사용하여 새로운 함수를 정의합니다. 주요 키워드는 다음과 같습니다.

  • RETURNS: 함수가 반환할 데이터 타입을 지정합니다.
  • DETERMINISTIC: 동일한 입력값에 대해 항상 동일한 결과를 반환한다는 의미입니다.
  • NO SQL: 함수 내부에서 데이터베이스 데이터를 읽거나 수정하지 않는다는 것을 선언합니다.

실전 예제: 이름에서 성(First Name) 추출하기

이제 실제 예제를 통해 커스텀 함수를 만들어 보겠습니다. 아래 함수는 전체 이름(Full Name)을 입력받아 첫 번째 단어인 이름(First Name)만 반환합니다.

mysql> DELIMITER //
mysql> CREATE FUNCTION get_First_Name(Name VARCHAR(255)) RETURNS
VARCHAR(255)
   DETERMINISTIC
   NO SQL
   BEGIN
      RETURN LEFT(Name,LOCATE(' ',Name) - 1);
   END
   //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;

함수 내부 로직을 살펴보면 다음과 같습니다.

  • LOCATE(' ', Name): 문자열에서 공백의 위치를 찾습니다.
  • LEFT(Name, LOCATE(' ', Name) - 1): 공백 앞까지의 문자열, 즉 이름 부분만 잘라서 반환합니다.

함수 호출 및 실행 결과

생성된 함수는 일반 SQL 함수처럼 SELECT 문으로 간단히 호출할 수 있습니다.

mysql> select get_First_Name('David Miller');

실행하면 다음과 같은 결과가 출력됩니다.

+--------------------------------+
| get_First_Name('David Miller') |
+--------------------------------+
| David |
+--------------------------------+
1 row in set, 2 warnings (0.00 sec)

이처럼 'David Miller'라는 전체 이름에서 'David'만 성공적으로 추출되었습니다. 이와 같은 방식으로 비즈니스 로직에 맞는 다양한 커스텀 함수를 만들어 쿼리에서 활용할 수 있습니다.