티스토리 뷰

Server

MySQL Function 만들기

니용 2020. 6. 12. 14:47
반응형

Author: 니용

 

MySQL에서 함수를 만들어보는 연습을 하려고 합니다.

대개는 많은 함수를 제공해주고 있지만 정작 필요할 때 일일이 찾아보기 번거로운 함수도 있지요.

DATE_FORMAT 전에 들어가는 파라미터의 VARCHAR(String) 값을 null을 체크하기 위해 일일이 이렇게 사용해야 해요.

 

SELECT YEAR(
    IF(
        (#{date} IS NULL) OR (#{date} = '') OR (LENGTH(#{date}) = 0) // 조건식
    , CURRENT_DATE() // 조건식이 true 인 경우
    , #{date} // 조건식이 false 인 경우 
    ) AS YEAR

그래서 함수를 생각해보았습니다.

 

DELIMITER $$
DROP FUNCTION IF EXISTS IS_BLANK; // 먼저 기존 함수를 날려주고
CREATE FUNCTION IS_BLANK(str VARCHAR(100)) RETURNS BOOL // 함수의 파라미터와 리턴값을 지정
    DETERMINISTIC // 아래에 자세히 설명

    BEGIN // 함수 시작
        DECLARE returnVal BOOL; // 함수 내에서 사용할 변수 선언
        SET returnVal = FALSE;     // 변수값 지정

        IF '' = str THEN  // 첫번째 조건
        SET returnVal = TRUE; 
        ELSEIF str IS NULL THEN  // 두번째 조건
        SET returnVal = TRUE;
        ELSEIF LENGTH(str) = 0 THEN // 세번째 조건
        SET returnVal = TRUE;
        END IF;  // 조건문 종료
    RETURN returnVal;  // 결과값 리턴
END // 함수 끝맺음

이렇게 IS_BLANK 함수를 생성하여 보다 빠르게 체크할 수 있게 되었습니다.

 

BOOL의 경우 참이면 1, 거짓이면 0이 나와요


 

같은 입력 파라미터를 사용하면서 저장 펑션이 같은 결과를 반환할 경우 deterministic으로 간주하며 그렇지 않을 경우는 not deterministic으로 간주합니다. 그래서 저장 펑션이 deterministic인지 아닌지를 결정해야 하고, 정확히 선언하지 못할 경우 저장 펑션은 예상치 못한 결과를 만들어 내거나 최적화되지 못하여 성능을 저하시킬 수도 있습니다.

반응형

'Server' 카테고리의 다른 글

Kotlin 설치법  (0) 2020.06.24
Kotlin이 뭐에요?  (1) 2020.06.22
이모지를 저장하자  (0) 2020.06.16
MySQL 의 LEFT OUTER JOIN - 23년 7월 수정  (0) 2020.06.11
로그 명령어와 grep 옵션  (0) 2020.05.26
MySQL 기본 인코딩 언어 설정하기  (2) 2020.05.11
댓글
공지사항