MySQL 프로시저에서 OUT 매개변수 사용하기
MySQL 저장 프로시저(Stored Procedure)에서 테이블의 데이터를 조회한 결과를 외부 변수로 전달하려면 SELECT ... INTO 구문을 사용하면 됩니다. 이 방식을 활용하면 쿼리 결과를 OUT 매개변수에 직접 저장할 수 있습니다.
아래 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1860 ( Amount int ); Query OK, 0 rows affected (0.00 sec)
2단계: 데이터 삽입
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1860 values(1590); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1860 values(410); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1860 values(3000); Query OK, 1 row affected (0.00 sec)
3단계: 전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select * from DemoTable1860;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+ | Amount | +--------+ | 1590 | | 410 | | 3000 | +--------+ 3 rows in set (0.00 sec)
4단계: OUT 매개변수가 있는 저장 프로시저 생성
이제 OUT 매개변수를 사용하는 저장 프로시저를 생성합니다. 프로시저 내부에서 SUM 함수로 Amount 컬럼의 합계를 구하고, 그 결과를 SELECT INTO 구문으로 OUT 매개변수에 저장합니다.
mysql> delimiter // mysql> create procedure use_of_out_parameter(out TotalAmount int) begin select sum(Amount) into TotalAmount from DemoTable1860; end // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ;
참고: delimiter //는 프로시저 본문 내부의 세미콜론(;)이 MySQL 클라이언트에서 문장 종료로 해석되지 않도록 구분자를 임시로 변경하는 명령입니다. 프로시저 생성이 완료된 후에는 반드시 delimiter ;로 원래대로 되돌려야 합니다.
5단계: 저장 프로시저 호출
CALL 명령어로 저장 프로시저를 실행하고, 결과를 받을 사용자 정의 변수(@TotalAmount)를 인자로 전달합니다.
mysql> call use_of_out_parameter(@TotalAmount); Query OK, 1 row affected (0.00 sec)
6단계: OUT 매개변수 값 확인
프로시저 호출이 완료되면 변수에 저장된 값을 SELECT 문으로 확인할 수 있습니다.
mysql> select @TotalAmount;
실행 결과는 다음과 같습니다.
+--------------+ | @TotalAmount | +--------------+ | 5000 | +--------------+ 1 row in set (0.00 sec)
정리
이처럼 MySQL에서는 SELECT ... INTO 구문과 OUT 매개변수를 조합하면, 저장 프로시저 내부에서 계산된 집계 값(예: 합계, 평균, 개수 등)을 프로시저 외부의 변수로 손쉽게 전달할 수 있습니다. 이는 애플리케이션에서 복잡한 연산 로직을 데이터베이스 쪽으로 위임할 때 매우 유용하게 활용됩니다.