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;