MySQL에서 저장 프로시저(Stored Procedure)의 실행 결과를 외부로 반환하려면 사용자 정의 세션 변수(User-defined Session Variable)를 활용해야 합니다. 핵심은 변수 이름 앞에 @ 기호를 붙이는 것입니다.
세션 변수(@)란 무엇인가?
MySQL에서 @ 기호가 붙은 변수는 현재 연결(세션) 동안만 유효한 사용자 정의 변수입니다. 저장 프로시저 내부에서 계산된 값을 이 변수에 담아두면, 프로시저 호출이 끝난 후에도 SELECT 문으로 값을 꺼내 확인할 수 있습니다.
예를 들어 valido라는 변수의 값을 조회하려면 다음과 같이 작성합니다.
SELECT @valido;
마찬가지로 어떤 변수든 조회할 때는 아래 문법을 사용합니다.
SELECT @anyVariableName;
값을 반환하는 저장 프로시저 생성하기
이제 실제로 값을 반환하는 저장 프로시저를 만들어 보겠습니다. 두 개의 숫자를 입력받아 조건에 따라 합 또는 차를 계산하고, 그 결과를 OUT 파라미터와 세션 변수에 담는 예제입니다.
mysql> DELIMITER //
mysql> create procedure ReturnValueFrom_StoredProcedure
-> (
-> In num1 int,
-> In num2 int,
-> out valido int
-> )
-> Begin
-> IF (num1 > 4 and num2 > 5) THEN
-> SET valido = (num1 + num2);
-> ELSE
-> SET valido = (num1 - num2);
-> END IF;
-> select @valido;
-> end //
Query OK, 0 rows affected (0.32 sec)
mysql> DELIMITER ;
위 프로시저의 로직은 다음과 같습니다.
num1 > 4이고num2 > 5일 때 → 두 수의 합(num1 + num2)을 반환- 그 외의 경우 → 두 수의 차(num1 − num2)를 반환
CALL 명령으로 프로시저 호출하기
생성된 저장 프로시저는 CALL 명령으로 호출합니다. 첫 번째 예제에서는 10과 6을 전달하고, 결과를 받을 세션 변수로 @TotalSum을 지정합니다.
mysql> call ReturnValueFrom_StoredProcedure(10,6,@TotalSum);
+---------+
| @valido |
+---------+
| NULL |
+---------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
프로시저 내부의 select @valido;는 아직 값이 설정되지 않아 NULL을 출력하지만, 실제 계산 결과는 OUT 파라미터인 @TotalSum에 저장됩니다.
결과 확인
mysql> select @TotalSum;
실행 결과는 다음과 같습니다. 10 + 6 = 16이 정상적으로 반환되었습니다.
+-----------+
| @TotalSum |
+-----------+
| 16 |
+-----------+
1 row in set (0.00 sec)
두 번째 호출 – 차이(Difference) 계산
이번에는 조건을 만족하지 않는 값(4, 2)을 전달하여 두 수의 차를 계산해 보겠습니다.
mysql> call ReturnValueFrom_StoredProcedure(4,2,@TotalDiff);
+---------+
| @valido |
+---------+
| NULL |
+---------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
num1이 4이므로 num1 > 4 조건을 만족하지 않아 ELSE 블록이 실행되고, 4 − 2 = 2가 반환됩니다.
결과 확인
mysql> select @TotalDiff;
+------------+
| @TotalDiff |
+------------+
| 2 |
+------------+
1 row in set (0.00 sec)
정리
- MySQL 저장 프로시저에서 값을 반환하려면 OUT 파라미터 또는 사용자 정의 세션 변수(@변수명)를 사용합니다.
- 세션 변수는 현재 연결에서만 유효하며, 프로시저 호출 후
SELECT @변수명;으로 손쉽게 결과를 확인할 수 있습니다. - 호출 시점에
CALL 프로시저명(값1, 값2, @결과변수);형태로 변수를 전달하면 프로시저가 계산한 값이 해당 변수에 저장됩니다.