pbj0812의 코딩 일기

[SQL] MySQL function 생성 및 테스트 본문

ComputerLanguage_Program/SQL

[SQL] MySQL function 생성 및 테스트

pbj0812 2021. 7. 14. 01:15

0. 목표

 - MySQL 에서의 function 생성 및 테스트

1. 실습하기(단순 출력)

 1) function 생성

  - FUNCTION_TEST 실행시 OK 출력

DELIMITER $$ 
DROP FUNCTION IF EXISTS FUNCTION_TEST$$ 
CREATE FUNCTION FUNCTION_TEST() 
	RETURNS VARCHAR(20) 
BEGIN 
	DECLARE Result VARCHAR(10); 
	SET Result = 'OK'; 
	RETURN Result; 
END $$ 
DELIMITER ;

 2) 에러 확인 및 수정

Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

  - 위와 같은 에러 발생 시 아래 쿼리 실행

SHOW GLOBAL variables like 'log_bin_trust_function_creators';

 - 이때 OFF 로 되어 있다면 아래의 쿼리를 실행하여 ON 으로 변경

SET GLOBAL log_bin_trust_function_creators = 1;

 3) 실행

SELECT FUNCTION_TEST();

2. 실습하기(계산 결과 출력)

 1) 데이터 밑작업(holiday 테이블 생성 및 데이터 삽입)

  - 링크

 2) 함수생성

  - 시작일(StartDate), 종료일(FinishDate) 를 지정해주면 기간 사이에 포함된 holiday 의 수를 반환

  - SELECT 결과를 반환하기 위해서는 INTO로 표시해줌

  - RETURN 으로 반환

DELIMITER $$
DROP FUNCTION IF EXISTS HOLIDAY_COUNT$$ 
CREATE FUNCTION HOLIDAY_COUNT(StartDate datetime, FinishDate datetime) 
	RETURNS VARCHAR(20) 
BEGIN 
	DECLARE Result VARCHAR(10);
    SET Result = 0;
    SELECT COUNT(*) INTO Result
    FROM holiday
    WHERE
		holiday >= StartDate
        AND holiday < FinishDate;
	RETURN Result; 
END $$ 
DELIMITER ;

 3) 확인

SELECT  HOLIDAY_COUNT('2021-01-01', '2021-01-10');

3. 참고

 - Mysql - function 생성시 에러가 발생하는 경우(This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in. its declaration and binary logging is enabled) 

 - mysql FUNCTION, PROCEDURE 예제
[MySql] Function 생성, 사용

Comments