HAZEL

[ SQL : 사용자 정의 함수, User - defined Function ] 본문

DATA ANALYSIS/SQL

[ SQL : 사용자 정의 함수, User - defined Function ]

Rmsid01 2021. 5. 17. 21:00

 

 

User - defined Function - Mysql


01. 기본 구조

CREATE FUNCTION '함수이름 function name' ('parameter name', 'datatype' )
	RETURN '출력될 결과의 datatype' ( DETERMINISTIC )
BEGIN 
	DECLARE 'variable name' 'datatype';
    SET;
    RETURN ( Query ) / 'variabel name';
END


-- 사용 방법
SELECT 'function name' (parameter)

 ( DETERMINISTIC ) : 은 NOT  DETERMINISTIC 이 defalt 임. 인풋값은 똑같고, 아웃풋값이 호출할 때마다 같을때,   DETERMINISTIC  을 적어주고, 아니면 defalt값으로 유지하면 된다. 

 

- 기본구조에서 가장 중요한 것은 'RETURN'은 반드시 적어주어야 한다는 것이다. 

 : 이 때, 중간에 변수를 선언해주어야 할 때, DECLARE 와 SET 으로 변수를 설정해준다. 

   DECLARE 와 SET에는 ; 을 반드시 적어주어야 한다.

 

 

02. 예시  - MY SQL 튜토리얼

https://www.mysqltutorial.org/mysql-stored-function/

 

Let’s take the example of creating a stored function. We will use the customers table in the sample database for the demonstration.

CREATE FUNCTION CustomerLevel(
	credit DECIMAL(10,2)
) 
RETURNS VARCHAR(20) DETERMINISTIC
BEGIN
    DECLARE customerLevel VARCHAR(20);

    IF credit > 50000 THEN
		SET customerLevel = 'PLATINUM';
    ELSEIF (credit >= 50000 AND 
			credit <= 10000) THEN
        SET customerLevel = 'GOLD';
    ELSEIF credit < 10000 THEN
        SET customerLevel = 'SILVER';
    END IF;
	-- return the customer level
	RETURN (customerLevel);
END

 

- DECIMAL : 실수형 

- RETURNS : 함수의 반환값 

- VARCHAR : 문자

- DETERMINISTIC : 항상 반환값이 같기때문에, 적어줌 

- DECLARE customerLevel VARCHAR(20); : 변수를 선언을 해줌 

- IF 문을 이용해서 조건에 따라서 RETURN 

 

- 위의 함수를 실행하는 방법 

SELECT 
    customerName, 
    CustomerLevel(creditLimit)
FROM
    customers
ORDER BY 
    customerName;