이 글에서는 저장 프로시저(stored procedure)를 생성한 뒤, MySQL의 준비된 문(prepared statement)에서 반환 값을 선택하는 방법을 알아봅니다.
준비된 문은 PREPARE로 SQL문을 등록하고 EXECUTE로 실행하는 방식으로 동작합니다. 아래 예제에서는 사용자 정의 변수(@returnQuery)에 SELECT 쿼리 문자열을 담아 이를 준비된 문으로 실행하고, 그 결과를 또 다른 변수(@value)에 저장합니다.
1. 저장 프로시저 생성
먼저 저장 프로시저를 만들고, 그 안에서 준비된 문을 통해 반환 값을 선택합니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE return_value()
-> BEGIN
-> SET @returnQuery= 'SELECT 98 INTO @value';
-> PREPARE stmt FROM @returnQuery;
-> EXECUTE stmt;
-> END
-> //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;
위 코드에서는 DELIMITER //로 구분 기호를 변경하여 프로시저 본문 전체를 하나의 문장으로 처리한 뒤, 작업이 끝나면 다시 ;로 되돌립니다.
2. 저장 프로시저 호출
CALL 명령을 사용하여 저장 프로시저를 실행합니다.
mysql> call return_value();
Query OK, 1 row affected (0.07 sec)
3. 결과 값 확인
프로시저 내부에서 INTO @value로 저장된 값은 세션이 유지되는 동안 계속 접근할 수 있습니다. SELECT 문으로 해당 변수의 값을 확인해 보겠습니다.
mysql> select @value;
출력 결과
위 쿼리는 다음과 같은 출력을 생성합니다.
+--------+
| @value |
+--------+
| 98 |
+--------+
1 row in set (0.00 sec)
이처럼 준비된 문 안에서 SELECT ... INTO @변수 구문을 사용하면, 쿼리 실행 결과를 사용자 정의 변수에 담아 프로시저 외부에서도 손쉽게 조회할 수 있습니다.