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

MySQL 저장 프로시저에서 IF 문 활용하는 방법 완벽 가이드

MySQL의 IF 문은 저장 프로시저(Stored Procedure) 내부에서 기본적인 조건 분기를 구현할 때 사용하는 제어문입니다. 조건식이 참(TRUE)일 경우에만 특정 문장들을 실행하도록 만들 수 있어, 절차형 로직을 작성하는 데 필수적인 요소입니다.

IF 문 기본 문법

IF expression THEN
Statements;
END IF;

IF 문은 반드시 세미콜론(;)으로 끝나야 한다는 점에 유의해야 합니다. expression 자리에는 평가 결과가 참 또는 거짓으로 판단되는 조건식이 들어가며, 조건이 참일 때 THEN 이후의 문장들이 실행됩니다.

예제 테이블 소개

저장 프로시저에서 IF 문을 실제로 어떻게 활용하는지 살펴보기 위해, 아래와 같은 데이터를 가진 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 문이 포함된 저장 프로시저 생성

다음 쿼리는 IF 문을 포함하는 coursedetails_IF라는 이름의 저장 프로시저를 생성합니다. 이 프로시저는 과목명을 입력받아(IN 파라미터), 해당 과목이 'Computers'라면 'B.Tech(CSE)'라는 과정명을 출력(OUT 파라미터)하는 로직을 담고 있습니다.

mysql> DELIMITER // ;
mysql> CREATE PROCEDURE coursedetails_IF(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)';
-> END IF;
-> END //
Query OK, 0 rows affected (0.00 sec)

프로시저 생성 코드의 주요 흐름을 정리하면 다음과 같습니다.

  • DECLARE Sub: 과목명을 임시로 저장할 지역 변수를 선언합니다.
  • SELECT ~ INTO: student_info 테이블에서 입력된 과목과 일치하는 행의 Subject 값을 변수에 저장합니다.
  • IF 문: 변수 값이 'Computers'와 일치하는지 확인하고, 일치하면 OUT 파라미터에 'B.Tech(CSE)'를 할당합니다.

프로시저 호출 및 결과 확인

생성된 프로시저를 호출하여 실제 동작 결과를 확인해 보겠습니다.

mysql> Delimiter ; //
mysql> CALL coursedetails_IF('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)

호출 결과, 입력값 'Computers'가 IF 문의 조건을 만족했기 때문에 사용자 변수 @S_Course에 'B.Tech(CSE)'가 저장된 것을 확인할 수 있습니다.

참고 사항

만약 조건이 거짓이라면 IF 블록 내부의 문장은 실행되지 않으며, OUT 변수에는 아무 값도 할당되지 않아 NULL이 반환됩니다. 여러 조건을 처리해야 하는 경우에는 단순 IF 문 대신 IF ... ELSEIF ... ELSE 형태나 CASE 문을 사용하는 것이 좋습니다. 또한 저장 프로시저 작성 시 DELIMITER 변경 후에는 반드시 원래 구분자로 되돌려 놓아야 이후 SQL 문장들이 정상적으로 실행됩니다.