MySQL의 저장 프로시저(Stored Procedure)에서는 AND 또는 OR 연산자를 활용하여 여러 조건을 결합한 IF 문을 작성할 수 있습니다. 이를 통해 하나의 조건문 안에서 복잡한 논리 판단을 처리할 수 있습니다.
기본 문법
여러 조건이 있는 IF 문의 기본적인 문법은 다음과 같습니다.
DECLARE X int;
DECLARE Y int;
SET X = value1;
SET Y = value2;
IF ( (X < Y AND X > value1 AND Y > value2) OR X != anyValueToCompare ) THEN
yourStatement;
ELSE
yourStatement;
END IF;
괄호를 사용하면 AND와 OR 조건의 우선순위를 명확하게 구분할 수 있으므로, 복잡한 조건식을 작성할 때는 괄호로 그룹화하는 것이 좋습니다.
저장 프로시저 예제
위 문법을 실제로 이해하기 위해 저장 프로시저를 하나 생성해 보겠습니다. 먼저 구분자(Delimiter)를 변경한 후 프로시저를 만듭니다.
mysql> DELIMITER //
mysql> create procedure SP_IFELSEDEMO()
-> BEGIN
-> DECLARE X int;
-> DECLARE Y int;
-> SET X=100;
-> SET Y=400;
-> IF ( (X < Y AND X > 99 AND Y > 300) OR X != 10 ) THEN
-> SELECT 'Logic is Correct';
-> ELSE
-> SELECT 'Logic is not Correct';
-> END IF;
-> END;
-> //
Query OK, 0 rows affected (0.27 sec)
mysql> DELIMITER ;
저장 프로시저 호출하기
프로시저 생성이 완료되면 CALL 명령어를 사용하여 실행할 수 있습니다.
mysql> call SP_IFELSEDEMO();
출력 결과
+------------------+
| Logic is Correct |
+------------------+
| Logic is Correct |
+------------------+
1 row in set (0.04 sec)
Query OK, 0 rows affected (0.07 sec)
동작 원리 분석
이 예제에서는 변수 X에 100, Y에 400을 할당했습니다. IF 문의 첫 번째 조건 그룹을 살펴보면 다음과 같습니다.
- X < Y : 100 < 400 → 참
- X > 99 : 100 > 99 → 참
- Y > 300 : 400 > 300 → 참
AND 연산자로 연결된 세 조건이 모두 참이므로 괄호 안의 조건 그룹 전체가 참이 됩니다. 따라서 OR 뒤의 조건(X != 10)을 평가할 필요 없이 전체 조건식이 참으로 판정되어 'Logic is Correct'가 출력된 것입니다.
참고 사항
- 저장 프로시저 내부에서는 단순 IF 문 대신 IF ~ ELSEIF ~ ELSE 구조를 사용하여 여러 분기를 처리할 수도 있습니다.
- MySQL 클라이언트에서 프로시저를 정의할 때는 세미콜론(;)과 프로시저 종료 문자 충돌을 피하기 위해 DELIMITER 명령으로 구분자를 임시 변경하는 것이 일반적입니다.
- 조건식에서 비교 연산자(<, >, =, != 등)와 논리 연산자(AND, OR, NOT)를 자유롭게 조합할 수 있습니다.