MySQL에서는 하나의 저장 프로시저(Stored Procedure) 안에서 다른 여러 개의 저장 프로시저를 순차적으로 호출할 수 있습니다. 이를 활용하면 반복적인 작업을 하나의 진입점으로 묶어 관리할 수 있어 코드의 재사용성과 유지보수성이 크게 향상됩니다.
기본 문법
저장 프로시저 내부에서 여러 프로시저를 호출하는 기본 문법은 다음과 같습니다.
DELIMITER //
CREATE PROCEDURE yourProcedureName()
BEGIN
CALL yourStoredProcedureName1();
CALL yourStoredProcedureName2();
.
.
N
END
//
DELIMITER //
실습 예제
이제 위 문법을 실제로 구현해 보겠습니다.
1. 첫 번째 저장 프로시저 생성
'HELLO WORLD !!' 메시지를 출력하는 첫 번째 프로시저를 생성합니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE hello_message()
-> BEGIN
-> SELECT 'HELLO WORLD !!';
-> END
-> //
Query OK, 0 rows affected (0.19 sec)
2. 두 번째 저장 프로시저 생성
'HI !!!!' 메시지를 출력하는 두 번째 프로시저를 생성합니다.
mysql> CREATE PROCEDURE hi_message()
-> BEGIN
-> SELECT 'HI !!!!';
-> END
-> //
Query OK, 0 rows affected (0.11 sec)
mysql> DELIMITER ;
3. 여러 프로시저를 호출하는 메인 프로시저 생성
앞서 만든 두 개의 프로시저를 순서대로 호출하는 새로운 프로시저를 생성합니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE call_all_stored_procedure()
-> BEGIN
-> CALL hello_message();
-> CALL hi_message();
-> END
-> //
Query OK, 0 rows affected (0.26 sec)
mysql> DELIMITER ;
실행 및 결과 확인
이제 메인 저장 프로시저를 호출하면 내부에 정의된 모든 프로시저가 순차적으로 실행됩니다.
mysql> call call_all_stored_procedure();
실행 결과는 다음과 같습니다.
+----------------+
| HELLO WORLD !! |
+----------------+
| HELLO WORLD !! |
+----------------+
1 row in set (0.06 sec)
+---------+
| HI !!!! |
+---------+
| HI !!!! |
+---------+
1 row in set (0.06 sec)
Query OK, 0 rows affected (0.08 sec)
정리
이처럼 CALL 명령문을 사용하면 하나의 저장 프로시저 안에서 원하는 만큼 다른 프로시저들을 호출할 수 있습니다. DELIMITER 설정에 주의하고, 각 프로시저의 실행 순서를 고려하여 설계하면 복잡한 비즈니스 로직도 깔끔하게 모듈화할 수 있습니다.