HOWTO · MySQL

MySQL에서 함수 만들기

이 튜토리얼은 MySQL에서 함수를 생성하는 방법을 보여줍니다.

이 페이지의 내용

오늘의 튜토리얼은 MySQL에서 함수를 생성하는 방법에 대해 교육합니다. 구문을 먼저 설명한 다음 샘플 테이블을 사용하여 함수를 만듭니다.

MySQL에서 함수 만들기

하나 이상의 매개변수를 전달하고 값을 반환받을 수 있는 저장 프로그램을 함수라고 합니다. 일부 작업을 수행하고 하나의 값을 출력하는 일련의 SQL 문이 있습니다.

다음은 MySQL 함수를 생성하기 위한 구문입니다.

CREATE FUNCTION functionName(parameter1, parameter2, ..)
          RETURN dataType [characteristics]
          function_body

여기서 function_body는 작업 또는 작업을 완료하기 위한 SQL 문으로 구성됩니다. 그 구조는 아래와 같습니다.

BEGIN
    MySQL Statements
    RETURN Expression
END

다음은 함수를 만드는 전체 구문입니다.

DELIMITER ;;

CREATE FUNCTION functionName(parameter1,parameter2,)
    RETURNS datatype
    [NOT] DETERMINISTIC

BEGIN
    MySQL Statements
    RETURN Expression
END ;;

DELIMITER ;

위 구문에서 우리는 다음 작업을 수행합니다.

  1. 모든 문을 개별적으로 실행할 수 없도록 구분 기호를 재설정합니다.
  2. CREATE FUNCTION 키워드 뒤에 함수 이름을 씁니다.
  3. 함수 이름 뒤 괄호 안에 파라미터를 모두 적습니다. INOUT, IN 또는 OUT이라는 수정자를 매개변수에 지정할 수 없지만 모든 매개변수는 기본적으로 IN 매개변수입니다.
  4. 유효한 반환 데이터 유형을 작성하십시오.
  5. 함수가 DETERMINISTIC을 사용하는지 여부를 지정합니다. MySQL Server는 NOT DETERMINISTIC/DETERMINISTIC 키워드를 쓰지 않으면 NOT DETERMINISTIC을 사용합니다.
  6. BEGINEND 블록 사이에 메인 코드를 작성합니다. 함수 본문에서 최소 하나의 RETURN 문을 작성해야 합니다.
  7. 마지막으로 구분 기호를 기본값 ;으로 변경합니다.

IDCREDIT의 두 속성이 있는 users라는 테이블을 준비하겠습니다. 여기서 ID는 기본 키입니다. 다음 쿼리를 사용하여 users 테이블을 만들고 채울 수 있습니다.

예제 코드:

# create a table
CREATE TABLE users (
      ID INT NOT NULL AUTO_INCREMENT,
      CREDIT INT NOT NULL,
      PRIMARY KEY (id)
);

# insert data
INSERT INTO users (CREDIT) VALUES (5000);
INSERT INTO users (CREDIT) VALUES (4000);
INSERT INTO users (CREDIT) VALUES (3000);
INSERT INTO users (CREDIT) VALUES(1000);

# display data
SELECT * FROM users;

출력:

+----+--------+
| ID | CREDIT |
+----+--------+
|  1 |   5000 |
|  2 |   4000 |
|  3 |   3000 |
|  4 |   1000 |
+----+--------+
4 rows in set (0.00 sec)

CREDIT에 따라 userLevel을 결정하기 위해 다음 함수를 작성합니다. 아래 제공된 코드 예제를 참조하십시오.

예제 코드:

DELIMITER ;;

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

    IF credit >= 5000 THEN
		SET userLevel = 'PLATINUM';
    ELSEIF (credit >= 4000 AND
			credit < 5000) THEN
        SET userLevel = 'GOLD';
    ELSEIF (credit > 1000 AND credit < 4000 ) THEN
        SET userLevel = 'SILVER';
    ELSE
    	SET userLevel = 'BASIC';
    END IF;

	RETURN (userLevel);
END;;
DELIMITER ;

함수가 생성되면 다음 쿼리를 사용하여 함수를 호출합니다.

SELECT ID,CREDIT, UserLevels(CREDIT) AS USER_LEVEL
FROM users;

출력:

+----+--------+------------+
| ID | CREDIT | USER_LEVEL |
+----+--------+------------+
|  1 |   5000 | PLATINUM   |
|  2 |   4000 | GOLD       |
|  3 |   3000 | SILVER     |
|  4 |   1000 | BASIC      |
+----+--------+------------+
4 rows in set (0.06 sec)