저장 프로시저(Stored Procedure) 안에서 또 다른 저장 프로시저를 호출해야 하는 경우가 종종 있습니다. MySQL에서는 IF 조건문과 CALL 명령어를 조합하면 간단하게 구현할 수 있습니다. 이 글에서는 입력값에 따라 서로 다른 저장 프로시저를 실행하는 방법을 단계별로 살펴보겠습니다.
기본 문법
저장 프로시저 내에서 다른 저장 프로시저를 호출하는 기본 문법은 다음과 같습니다.
If yourInputValue > 100 then
call yourProcedureName1();
else
call yourProcedureName2();
end If;
END
예제용 저장 프로시저 생성
먼저 예제에 사용할 첫 번째 저장 프로시저를 만들어 보겠습니다. 이 프로시저는 'Hello World!!!'라는 문자열을 출력합니다.
mysql> delimiter //
mysql> create procedure Hello_Stored_Procedure()
-> BEGIN
-> select 'Hello World!!!';
-> END
-> //
Query OK, 0 rows affected (0.18 sec)
다음으로 두 번째 저장 프로시저를 생성합니다. 이 프로시저는 'Hi!!!'라는 문자열을 출력합니다.
mysql> create procedure Hi_Stored_Procedure()
-> BEGIN
-> select 'Hi!!!';
-> END
-> //
Query OK, 0 rows affected (0.17 sec)
IF 논리가 포함된 저장 프로시저 작성
이제 입력값(IN 매개변수)을 받아, 값이 100보다 크면 Hello_Stored_Procedure를, 그렇지 않으면 Hi_Stored_Procedure를 호출하는 저장 프로시저를 만들어 보겠습니다.
mysql> DELIMITER //
mysql> create procedure test(IN input int)
-> BEGIN
-> If input > 100 then
-> call Hello_Stored_Procedure();
-> else
-> call Hi_Stored_Procedure();
-> end If;
-> END
-> //
Query OK, 0 rows affected (0.18 sec)
저장 프로시저 실행 및 결과 확인
구분자(delimiter)를 원래대로 되돌린 후, CALL 명령어로 프로시저를 실행할 수 있습니다. 여기서는 110이라는 값을 전달해 보겠습니다.
mysql> delimiter ;
mysql> call test(110);
입력값 110은 100보다 크므로, IF 조건에 따라 Hello_Stored_Procedure가 실행되어 다음과 같은 결과가 출력됩니다.
+----------------+
| Hello World!!! |
+----------------+
| Hello World!!! |
+----------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
정리
이처럼 저장 프로시저 내부에서 IF 조건문과 CALL 명령어를 함께 사용하면, 입력값에 따라 분기 처리하면서 다른 저장 프로시저를 유연하게 호출할 수 있습니다. 반대로 100 이하의 값을 전달하면 Hi_Stored_Procedure가 실행되어 'Hi!!!'가 출력되는 것도 직접 확인해 보시기 바랍니다. 이 패턴은 복잡한 비즈니스 로직을 모듈화하고 코드 재사용성을 높이는 데 매우 유용합니다.