Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저에서 IF ELSEIF ELSE 문 활용하기

MySQL IF ELSEIF ELSE 문이란?

MySQL의 IF ELSEIF ELSE 문은 여러 조건식을 평가한 결과에 따라 서로 다른 문장을 실행할 수 있게 해주는 조건 분기문입니다. 기본 문법은 다음과 같습니다.

IF expression THEN
    statements;
ELSEIF elseif-expression THEN
    elseif-statements;
... ... ... ...
ELSE
    else-statements;
END IF;

각 문장은 반드시 세미콜론(;)으로 끝나야 하며, 전체 블록은 END IF로 마무리됩니다.

예제 테이블 준비

저장 프로시저에서 IF ELSEIF ELSE 문의 사용 방법을 살펴보기 위해, 아래와 같은 데이터를 가진 'student_info' 테이블을 예로 들어보겠습니다.

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Jaipur     | Literature |
| 125  | Raman   | Shimla     | Computers  |
+------+---------+------------+------------+
3 rows in set (0.00 sec)

IF ELSEIF ELSE 문을 포함한 저장 프로시저 생성

다음 쿼리는 과목명을 입력받아 해당 과목에 맞는 과정명을 반환하는 'coursedetails_IF_ELSEIF' 프로시저를 생성합니다. 이 프로시저 내부에는 IF ELSEIF ELSE 조건문이 사용되었습니다.

mysql> DELIMITER // ;
mysql> CREATE PROCEDURE coursedetails_IF_ELSEIF(IN S_Subject Varchar(20), OUT S_Course varchar(20))
    -> BEGIN
    -> DECLARE Sub Varchar(20);
    -> SELECT Subject INTO SUB
    -> FROM Student_info WHERE S_Subject = Subject;
    -> IF Sub = 'Computers' THEN
    -> SET S_Course = 'B.Tech(CSE)';
    -> ELSEIF Sub = 'History' THEN
    -> SET S_Course = 'Masters in History';
    -> ELSEIF Sub = 'Literature' THEN
    -> SET S_Course = 'Masters in English';
    -> END IF;
    -> END //
Query OK, 0 rows affected (0.00 sec)

프로시저의 동작 방식을 간단히 설명하면 다음과 같습니다.

  • IN 파라미터(S_Subject): 호출 시 과목명을 입력값으로 전달받습니다.
  • OUT 파라미터(S_Course): 조건 판별 결과인 과정명을 외부로 반환합니다.
  • DECLARE: 과목명을 임시로 저장할 변수 Sub를 선언합니다.
  • SELECT INTO: student_info 테이블에서 일치하는 과목을 조회해 변수에 저장합니다.
  • IF ELSEIF: 변수 값에 따라 'Computers'는 B.Tech(CSE), 'History'는 Masters in History, 'Literature'는 Masters in English를 각각 설정합니다.

저장 프로시저 호출 및 결과 확인

이제 구분자(Delimiter)를 원래대로 되돌린 후 프로시저를 호출하면 아래와 같은 결과를 확인할 수 있습니다.

mysql> Delimiter ; //

mysql> CALL coursedetails_IF_ELSEIF('Computers', @S_Course);
Query OK, 1 row affected (0.00 sec)

mysql> Select @S_Course;
+-------------+
| @S_Course   |
+-------------+
| B.Tech(CSE) |
+-------------+
1 row in set (0.00 sec)

mysql> CALL coursedetails_IF_ELSEIF ('Literature', @S_Course);
Query OK, 1 row affected (0.00 sec)

mysql> Select @S_Course;
+--------------------+
| @S_Course          |
+--------------------+
| Masters in English |
+--------------------+
1 row in set (0.00 sec)

결과에서 볼 수 있듯이, 'Computers'를 입력하면 'B.Tech(CSE)'가, 'Literature'를 입력하면 'Masters in English'가 반환됩니다. 이처럼 IF ELSEIF ELSE 문을 활용하면 저장 프로시저 안에서 입력값에 따라 유연하게 분기 처리를 수행할 수 있습니다.