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 ;
위 구문에서 우리는 다음 작업을 수행합니다.
- 모든 문을 개별적으로 실행할 수 없도록 구분 기호를 재설정합니다.
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)