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

MySQL 저장 프로시저에서 값 반환하기 – OUT 파라미터와 세션 변수 활용법

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, @결과변수); 형태로 변수를 전달하면 프로시저가 계산한 값이 해당 변수에 저장됩니다.