MySQL에서는 하나의 저장 프로시저(Stored Procedure) 안에 여러 개의 SELECT 문을 포함할 수 있습니다. 이 경우 프로시저를 호출하면 각 SELECT 문의 결과가 별도의 결과 집합(Result Set)으로 순차적으로 출력됩니다. 이번 글에서는 두 개의 SELECT 문을 가진 저장 프로시저를 만들고 실행하는 과정을 살펴보겠습니다.
1. 저장 프로시저 생성
먼저 두 개의 SELECT 문을 포함하는 저장 프로시저를 생성해 보겠습니다. 프로시저 내부에는 여러 SQL 문이 들어가므로, 구문 구분자(Delimiter)를 변경하여 작성합니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE select_statement()
-> BEGIN
-> SELECT "HI" AS `FIRST VALUE`;
-> SELECT "HELLO" AS `SECOND VALUE`;
-> END
-> //
Query OK, 0 rows affected (0.09 sec)
mysql> DELIMITER ;
코드 설명
DELIMITER // : 기본 구분자인 세미콜론(;) 대신 // 를 사용하겠다는 의미입니다. 프로시저 본문 안의 SELECT 문이 세미콜론으로 끝나더라도 MySQL이 이를 프로시저 정의의 끝으로 잘못 해석하지 않도록 하기 위함입니다.
BEGIN ... END : 프로시저 본문의 시작과 끝을 나타내는 블록입니다. 그 안에 첫 번째 SELECT 문은 'HI'를 FIRST VALUE라는 별칭으로, 두 번째 SELECT 문은 'HELLO'를 SECOND VALUE라는 별칭으로 출력합니다.
DELIMITER ; : 프로시저 생성이 완료되면 구분자를 다시 원래대로 되돌립니다.
2. 저장 프로시저 호출
생성한 프로시저는 CALL 명령어로 호출할 수 있습니다.
mysql> CALL select_statement();
3. 실행 결과
위 프로시저를 호출하면 다음과 같이 두 개의 결과 집합이 차례로 출력됩니다.
+-------------+
| FIRST VALUE |
+-------------+
| HI |
+-------------+
1 row in set (0.00 sec)
+--------------+
| SECOND VALUE |
+--------------+
| HELLO |
+--------------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
정리
저장 프로시저 안에 SELECT 문이 여러 개 있으면, 프로시저 호출 시 각각의 SELECT 문이 독립적인 결과 집합으로 반환됩니다. 즉, 첫 번째 결과 집합(FIRST VALUE)과 두 번째 결과 집합(SECOND VALUE)이 순서대로 화면에 표시되며, 마지막에 전체 프로시저 실행 성공 메시지가 함께 출력됩니다. 이처럼 저장 프로시저를 활용하면 여러 조회 작업을 하나의 단위로 묶어 손쉽게 실행할 수 있습니다.