티스토리 뷰

Mysql

Mysql - Function 함수 생성 및 조회

realizers 2022. 1. 5. 17:37
728x90
반응형

함수의 구조


DELIMITER $$

CREATE FUNCTION '함수명' (파라미터) RETURNS 반환할 데이터타입
BEGIN
    DECLARE 변수명 VARCHAR (45) DEFAULT NULL;
    
    수행할 쿼리
    RETURN 반환할 값
    
END $$

 

함수 예제


DELIMITER $$
                   함수명    파라미터     반환할 데이터 타입
CREATE FUNCTION `GET_LEVER` (score INT) RETURNS VARCHAR (45) 
BEGIN
  // 변수 선언
  DECLARE levels VARCHAR (45) DEFAULT NULL;
  
  // 쿼리문 수행
  IF (score >= 60 AND score <= 69) THEN 
    SET levels = 'SILVER';
  ELSEIF (score >= 70 AND score <= 79) THEN 
    SET levels = 'GOLD';
  ELSEIF (score >= 80 AND score <= 89) THEN 
    SET levels = 'PLATINUM';
  END IF;
  
  // 결과값 반환
  RETURN levels;
END $$

 

함수 실행 방법


SELECT *, GET_LEVER(score) AS LEVEL FROM student

 

 

함수 생성 시 설정


오류 발생 원인

  • 아래와 같은 오류가 발생시 함수 설정이 OFF로 되어 있기 때문에 오류가 발생하는 것입니다.
  • ON으로 설정해준다면 오류가 발생하지 않습니다.
  • ON으로 설정이 되어 있는 경우에만 함수를 생성할 수 있습니다.
오류 코드: 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)

 

오류 해결 방법

  • 아래의 명령어를 입력하여 함수 설정이 ON으로 설정되어 있는지 OFF로 설정되어 있는지 확인할 수 있습니다.
  • 아래 사진은 OFF로 설정되어 있기 때문에 함수 생성시 오류가 발생합니다.
SHOW GLOBAL VARIABLES LIKE 'log_bin_trust_function_creators'

 

  • ON으로 설정을 바꾸는 방법은 아래 2가지가 있습니다.
SET GLOBAL log_bin_trust_function_creators = 'ON';
SET GLOBAL log_bin_trust_function_creators = 1;

728x90
반응형

'Mysql' 카테고리의 다른 글

Mysql - 뷰(View)란 무엇일까?  (2) 2022.01.09
Mysql - 커서(Cursor)란 무엇일까?  (0) 2022.01.07
Mysql - Procedure 프로시저 생성 및 조회  (0) 2022.01.05
Mysql - 계정 생성 방법  (0) 2021.02.03
Mysql - 설치 방법  (0) 2021.02.02