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

MySQL 저장 프로시저에서 IF NOT IN 사용하는 방법 – 문법과 실전 예제

MySQL의 저장 프로시저(Stored Procedure) 안에서도 IF NOT IN 조건문을 자유롭게 사용할 수 있습니다. NOT IN은 특정 값이 지정한 값 목록에 포함되어 있지 않은지를 판별할 때 유용하며, 이를 IF 문과 결합하면 조건에 따라 서로 다른 로직을 실행할 수 있습니다.

IF NOT IN 기본 문법

먼저 MySQL에서 IF NOT IN의 기본적인 작성 형식부터 살펴보겠습니다.

if(yourVariableName NOT IN (yourValue1, yourValue2, ... N)) then
    statement1
else
    statement2
end if;

위 문법의 의미는 다음과 같습니다. 변수의 값이 괄호 안에 나열된 값들에 포함되어 있지 않으면 statement1이 실행되고, 그렇지 않고 목록에 포함되어 있다면 else 블록의 statement2가 실행됩니다.

저장 프로시저 생성 예제

이제 위 문법을 실제 저장 프로시저에 적용해 보겠습니다. 숫자 값 하나를 입력받아 그 값이 10, 20, 30 중에 있는지 확인하는 프로시저입니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE IF_NOT_INDemo(IN value int)
    ->     BEGIN
    ->       if(value NOT IN (10,20,30)) then
    ->          select "Value Not Found";
    ->       else
    ->          select "Value Found";
    ->       end if;
    ->     END
    -> //
Query OK, 0 rows affected (0.25 sec)
mysql> DELIMITER ;

프로시저 생성 시에는 DELIMITER //로 구분자를 변경한 뒤 프로시저 본문을 정의하고, 작성이 끝나면 원래 구분자로 되돌리는 것이 일반적인 관례입니다. 입력 매개변수 value가 10, 20, 30 목록에 없으면 "Value Not Found"를, 있으면 "Value Found"를 반환하도록 구성했습니다.

저장 프로시저 호출하기

생성된 프로시저는 CALL 명령으로 호출할 수 있습니다. 값이 목록에 존재하는 경우와 존재하지 않는 경우, 두 가지 케이스로 나누어 결과를 확인해 보겠습니다.

Case 1 – 값이 목록에 존재하는 경우

mysql> call IF_NOT_INDemo(10);

출력 결과

+-------------+
| Value Found |
+-------------+
| Value Found |
+-------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

입력값 10은 목록(10, 20, 30)에 포함되어 있으므로 NOT IN 조건이 거짓이 되어, else 블록의 "Value Found" 메시지가 출력됩니다.

Case 2 – 값이 목록에 존재하지 않는 경우

mysql> call IF_NOT_INDemo(100);

출력 결과

+-----------------+
| Value Not Found |
+-----------------+
| Value Not Found |
+-----------------+
1 row in set (0.05 sec)

Query OK, 0 rows affected (0.07 sec)

반면 입력값 100은 목록에 없기 때문에 NOT IN 조건이 참이 되어, if 블록의 "Value Not Found" 메시지가 출력됩니다.

정리

이처럼 MySQL 저장 프로시저 내부에서도 IF NOT IN 조건문을 문제없이 사용할 수 있습니다. 값의 포함 여부에 따라 분기 처리가 필요한 비즈니스 로직, 데이터 검증, 유효성 체크 등을 프로시저 안에서 간결하게 구현할 때 활용하면 좋습니다.