[MySQL] 스토어드 함수

Wonjun Lee·2025년 6월 27일
💡

DBMS에서 제공하는 함수 외에 사용자가 직접 정의하여 사용할 수 있는 함수이다.

CREATE
		[DEFINER = { user | CURRENT_USER }]
		FUNCTION sf_name ([function_params[,...]])
		RETURNS type
		[characteristic ...] routine body

function_params :
	param_name type

characterlistic :
	COMMENT 'string' 
	| LANGUAGE SQL 
	| [NOT] DETERMINISTIC 
	| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
	| SQL SECURITY { DEFINER | INVOKER }

routine_body:
		valid SQL routine statment
키워드의미
DETERMINISTIC같은 입력이면 항상 같은 결과를 반환
NO SQL함수 내에서 SELECT, INSERT 등의 SQL 문을 전혀 사용하지 않음

간략화한 표현

DELIMITER $$
CREATE FUNCTION 스토어드_함수이름(파라미터)
	RETURNS 반환형식
BEGIN
	프로그래밍
END $$

DELIMITER ;
SELECT 스토어드_함수이름();

모든 파라미터는 입력용이다. 출력은 오직 RETURN으로만 가능하다.

스토어드 함수 안에선 집합 결과를 반환하는 SELECT문을 사용할 수 없다.

DELIMITER $$
CREATE FUNCTION userFunc(value1 int, value2 int) returns int
deterministic
no sql
begin
	return value1 + value2;
end$$

delimiter ;
select userFunc(1, 2);
use sqldb;
drop function if exists getAgeFunc;

delimiter $$
create function getAgeFunc(bYear int) returns int
deterministic
begin
	declare age int;
    set age = YEAR(now()) - bYear;
    return age;
end$$

delimiter ;
select getAgeFunc(2000) into @myAge;

select @myAge;

함수의 내용을 확인하기 위한 명령

show create function getAgeFunc;

0개의 댓글