본문 바로가기
카테고리 없음

Mysql - Function - 사용자 함수

by 반화넬 2023. 8. 13.
반응형

mysql mariadb function 사용자함수

•절차형 sql을 활용하여 일련의 sql처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL.
•DBMS 에서 제공되는 공통적 함수 이외에 사용자가 직접 정의하고 작성할 수 있다.
•기본적인 개념 및 사용법 , 문법 등은 프로시저와 동일
•종료 시 단일 값을 반환한다는 것이 프로시저와 가장 큰 차이점
•사용자 정의함수의 호출을 통해 실행되며 반환되는 단일 값을 조회 또는 삽입 수정 작업에 이용하는 것이 일반적임.
오늘은 Mysql , Mariadb function에 대해서 알아볼까 합니다. 프로시져를 이용한 Out 방식을 이용해도 되지만 사용자 정의 함수를 통해서도 가능하기 때문이죠.
CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS] function_name
    RETURNS {STRING|INTEGER|REAL|DECIMAL}
    SONAME shared_library_name



CREATE FUNCTION '함수 이름' ('파마리터 이름', '데이터 타입') 	
RETURNS '출력될 결과의 데이터 타입' 
BEGIN 
-- 변수가 필요할 때 declare와 set 사용 
	DECLARE 'variable name' 'datatype'; 
	SET ; 
	RETURN (Query) / 'variable name'; -- return필수! 
END

-- 사용 방법 
SELECT '함수 이름' (파라미터 이름)


function_name함수를 호출하기 위해 SQL 문에서 사용해야 하는 이름이며 RETURNS은 함수의 반환 값 유형을 표기를 합니다. DECIMAL는 뒤에 유효한 값 RETURNS이지만 현재 DECIMAL함수는 문자열 값을 반환하므로 함수처럼 사용하면 될것 같습니다.

IF NOT EXISTS 동일한 이름을 가진 로드 가능한 함수가 이미 존재하는 경우 오류가 발생하지 않도록 하기 위함이구요. 동일한 이름을 가진 내장 함수가 이미 존재하는 경우 오류 발생을 방지하지 않게 된답니다.


시간 Format  변경

 

DELIMITER $$

USE `DB_NAME`$$

DROP FUNCTION IF EXISTS `f_time_format`$$

CREATE FUNCTION `f_time_format`(s_time INTEGER) RETURNS VARCHAR(10) CHARSET utf8
    MODIFIES SQL DATA
    DETERMINISTIC
    COMMENT '시간 format 변경'
BEGIN
	DECLARE s_return VARCHAR(10) DEFAULT '';
	DECLARE r_time VARCHAR(10) DEFAULT '';
	DECLARE s_hour INT DEFAULT 0;
	DECLARE s_minute INT DEFAULT 0;
	DECLARE s_second INT DEFAULT 0;
	
	SET r_time = SEC_TO_TIME(s_time);
	SET s_hour = SUBSTRING_INDEX(r_time,':',1);
	SET s_minute = SUBSTRING_INDEX(SUBSTRING_INDEX(r_time,':',2),':',-1);
	SET s_second = SUBSTRING_INDEX(r_time,':',-1);
	SET s_return = CONCAT(IF(s_hour>0,CONCAT(s_hour,'시간'),''),IF(s_minute>0,CONCAT(s_minute,'분'),''),IF(s_second>0,CONCAT(s_second,'초'),''));
	
	RETURN s_return;
	
END$$

DELIMITER ;

 

ex) SELECT f_time_format(3600);

mysql mariadb function 사용자함수

사용자 함수의 경우 쿼리 실행을 통해서 가능하며 입력값으로 결과값을리턴 받을수 있습니다.

어렵지 않으니 만들어서 사용해보세요.

 

감사합니다.

반응형