MySQL에서 함수 만들기
Mehvish Ashiq
2024년2월16일
오늘의 튜토리얼은 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 ;
위 구문에서 우리는 다음 작업을 수행합니다.
- 모든 문을 개별적으로 실행할 수 없도록 구분 기호를 재설정합니다.
CREATE FUNCTION
키워드 뒤에 함수 이름을 씁니다.- 함수 이름 뒤 괄호 안에 파라미터를 모두 적습니다.
INOUT
,IN
또는OUT
이라는 수정자를 매개변수에 지정할 수 없지만 모든 매개변수는 기본적으로IN
매개변수입니다. - 유효한 반환 데이터 유형을 작성하십시오.
- 함수가
DETERMINISTIC
을 사용하는지 여부를 지정합니다. MySQL Server는NOT DETERMINISTIC
/DETERMINISTIC
키워드를 쓰지 않으면NOT DETERMINISTIC
을 사용합니다. BEGIN
과END
블록 사이에 메인 코드를 작성합니다. 함수 본문에서 최소 하나의RETURN
문을 작성해야 합니다.- 마지막으로 구분 기호를 기본값
;
으로 변경합니다.
ID
와 CREDIT
의 두 속성이 있는 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