MySQL에서 함수 만들기

Mehvish Ashiq 2024년2월16일
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)
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

관련 문장 - MySQL Function