MySQL CREATE FUNCTION 명령어는 데이터베이스에서 사용자 정의 함수를 생성하는 데 사용됩니다. 사용자 정의 함수는 복잡한 계산이나 데이터 변환 작업을 간단하고 일관되게 처리할 수 있도록 도와주는 강력한 도구입니다. 이를 통해 데이터베이스 내에서 반복적인 작업을 자동화하고, SQL 쿼리에서 효율성을 극대화할 수 있습니다.
CREATE FUNCTION의 주요 특징
- 반환값: 사용자 정의 함수는 항상 값을 반환하며, 이를 다른 쿼리에서 사용할 수 있습니다.
- 입력 매개변수: 하나 이상의 매개변수를 받아 동적으로 작업을 수행할 수 있습니다.
- 저장된 프로시저와의 차이: 함수는 SELECT 문에서 사용할 수 있는 반면, 저장된 프로시저는 별도로 호출해야 합니다.
- 재사용 가능성: 한 번 정의하면 여러 쿼리에서 재사용할 수 있습니다.
CREATE FUNCTION 문법
CREATE FUNCTION 함수명 (매개변수명 데이터형, ...)
RETURNS 반환타입
[DETERMINISTIC | NOT DETERMINISTIC]
[CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA]
BEGIN
-- 함수 본문
RETURN 값;
END;
중요 옵션 설명
- RETURNS 반환타입: 함수의 반환값 데이터 타입을 지정합니다.
- DETERMINISTIC: 동일한 입력값에 대해 항상 동일한 결과를 반환하는 함수임을 명시합니다.
- NOT DETERMINISTIC: 함수가 외부 요인에 의해 결과가 달라질 수 있음을 나타냅니다.
- CONTAINS SQL: 함수가 SQL 문을 포함할 수 있음을 지정합니다.
예제 1: 두 숫자의 합을 반환하는 간단한 함수
DELIMITER $$
CREATE FUNCTION add_numbers(a INT, b INT)
RETURNS INT
DETERMINISTIC
BEGIN
RETURN a + b;
END $$
DELIMITER ;
이 함수는 두 정수의 합을 계산하여 반환합니다. 예를 들어, SELECT add_numbers(5, 10);을 실행하면 15가 반환됩니다.
예제 2: 입력된 문자열을 대문자로 변환하는 함수
DELIMITER $$
CREATE FUNCTION to_uppercase(input_str VARCHAR(255))
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
RETURN UPPER(input_str);
END $$
DELIMITER ;
이 함수는 주어진 문자열을 대문자로 변환합니다. 예를 들어, SELECT to_uppercase('mysql');을 실행하면 'MYSQL'이 반환됩니다.
예제 3: 특정 날짜의 요일을 반환하는 함수
DELIMITER $$
CREATE FUNCTION get_weekday(date_value DATE)
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
RETURN DAYNAME(date_value);
END $$
DELIMITER ;
이 함수는 입력된 날짜의 요일을 반환합니다. 예를 들어, SELECT get_weekday('2025-01-01');을 실행하면 'Wednesday'가 반환됩니다.
CREATE FUNCTION 사용 시의 유의사항
1. 권한 요구
사용자 정의 함수를 생성하려면 CREATE ROUTINE 권한이 필요합니다.
GRANT CREATE ROUTINE ON 데이터베이스명.* TO '사용자명'@'호스트';
2. DELIMITER 변경
MySQL의 기본 명령 구분자인 세미콜론(;)은 함수 정의에 여러 줄이 포함될 때 문제가 될 수 있으므로 DELIMITER 명령어를 사용하여 다른 구분자를 설정해야 합니다.
3. ERROR 및 VALIDATION
함수 정의 중 오류가 발생하면, MySQL이 오류 메시지를 출력합니다. 정확한 문법을 사용해야 합니다.
CREATE FUNCTION 활용 사례
1. 복잡한 계산 단순화
예를 들어, 세금 계산을 위한 함수를 작성하여 매번 계산식을 작성하지 않고 간단히 호출할 수 있습니다.
DELIMITER $$
CREATE FUNCTION calculate_tax(amount DECIMAL(10, 2), rate DECIMAL(5, 2))
RETURNS DECIMAL(10, 2)
DETERMINISTIC
BEGIN
RETURN amount * rate / 100;
END $$
DELIMITER ;
2. 데이터 포맷 변환
날짜 형식을 변환하거나 문자열을 특정 포맷으로 정리할 때 유용합니다.
DELIMITER $$
CREATE FUNCTION format_date(date_value DATE)
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
RETURN DATE_FORMAT(date_value, '%Y-%m-%d');
END $$
DELIMITER ;
3. 조건부 데이터 처리
특정 조건에 따라 데이터를 처리하여 반환할 수 있습니다.
DELIMITER $$
CREATE FUNCTION check_positive(number INT)
RETURNS VARCHAR(10)
DETERMINISTIC
BEGIN
IF number >= 0 THEN
RETURN 'Positive';
ELSE
RETURN 'Negative';
END IF;
END $$
DELIMITER ;
CREATE FUNCTION의 장점
- 유지보수성
코드를 여러 쿼리에서 재사용할 수 있어 유지보수 작업이 간소화됩니다. - 퍼포먼스 향상
복잡한 연산을 데이터베이스 내부에서 처리함으로써 클라이언트-서버 간 데이터 전송량을 줄일 수 있습니다. - 가독성 개선
쿼리가 간결해지고, 의미를 명확히 전달할 수 있습니다.
참고 문서
MySQL CREATE FUNCTION에 대한 공식 문서: https://dev.mysql.com/doc/refman/8.0/en/create-function.html
검색에 최적화된 해시태그
#MySQL #MySQLCREATEFUNCTION #사용자정의함수 #MySQL튜토리얼 #데이터베이스개발 #SQL학습자료 #SQL함수작성 #MySQL가이드 #데이터베이스자동화 #SQL최적화
'DB' 카테고리의 다른 글
[MySQL] DROP PROCEDURE 완벽 가이드 사용법(프로시저 삭제) (0) | 2025.01.08 |
---|---|
[MySQL] CREATE PROCEDURE 완벽 가이드 사용법(프로시저 생성) (0) | 2025.01.08 |
[MySQL] DROP FUNCTION 완벽 가이드 사용법(함수 삭제) (0) | 2025.01.08 |
[MySQL] DROP EVENT 완벽 가이드 사용법(이벤트 삭제) (0) | 2025.01.08 |
[MySQL] ALTER EVENT 완벽 가이드 사용법(이벤트수정) (0) | 2025.01.08 |
[MySQL] CREATE EVENT 완벽 가이드 사용법(스케줄링) (0) | 2025.01.08 |
[MySQL] REVOKE 완벽 가이드 사용법(권한 제거) (0) | 2025.01.08 |
[MySQL] GRANT 완벽 가이드 사용법(권한 부여) (0) | 2025.01.08 |