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

MySQL 저장 프로시저에서 두 개의 SELECT 문 결과 출력하는 방법

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)이 순서대로 화면에 표시되며, 마지막에 전체 프로시저 실행 성공 메시지가 함께 출력됩니다. 이처럼 저장 프로시저를 활용하면 여러 조회 작업을 하나의 단위로 묶어 손쉽게 실행할 수 있습니다.