MySQL에서 저장 프로시저(Stored Procedure) 내부에 임시 테이블(Temporary Table)을 생성하면, 세션이 유지되는 동안에만 존재하는 중간 데이터를 손쉽게 처리할 수 있습니다. 이 글에서는 프로시저 안에서 임시 테이블을 만들고 데이터를 삽입·조회하는 전체 과정을 단계별로 살펴보겠습니다.
기본 문법
프로시저 내에서 임시 테이블을 생성하는 기본 문법은 다음과 같습니다.
CREATE PROCEDURE yourProcedureName()
BEGIN
CREATE TEMPORARY TABLE yourTemporaryTableName SELECT yourValue;
END1. 임시 테이블을 생성하는 프로시저 작성
먼저 구분자(Delimiter)를 변경한 뒤, 임시 테이블을 생성하는 저장 프로시저를 만들어 보겠습니다. 아래 예제에서는 값 500을 담는 임시 테이블을 생성합니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE create_Temporary_Table()
-> BEGIN
-> CREATE TEMPORARY TABLE tmpDemoTable SELECT 500;
-> END//
Query OK, 0 rows affected (0.15 sec)2. 임시 테이블에 데이터를 삽입하는 프로시저 작성
다음으로, 앞서 생성한 임시 테이블에 레코드를 추가하는 프로시저를 작성합니다.
mysql> CREATE PROCEDURE insert_Record_InTempTable()
-> BEGIN
-> INSERT INTO tmpDemoTable VALUES (300);
-> END//
Query OK, 0 rows affected (0.06 sec)프로시저 정의가 끝났으므로 구분자를 원래대로 되돌립니다.
mysql> DELIMITER ;
3. 프로시저 호출하기
이제 CALL 문을 사용해 두 프로시저를 순서대로 호출합니다. 첫 번째 호출로 임시 테이블이 생성되고, 두 번째 호출로 데이터가 삽입됩니다.
mysql> call create_Temporary_Table(); Query OK, 1 row affected (0.00 sec) mysql> call insert_Record_InTempTable(); Query OK, 1 row affected (0.00 sec)
4. 결과 조회하기
SELECT 문으로 임시 테이블의 모든 레코드를 확인할 수 있습니다.
mysql> select * from tmpDemoTable;
출력 결과
+-----+ | 500 | +-----+ | 500 | | 300 | +-----+ 2 rows in set (0.00 sec)
참고 사항
임시 테이블은 현재 세션에만 존재하며, 세션이 종료되면 자동으로 삭제됩니다. 또한 같은 이름의 일반 테이블이 있어도 충돌 없이 사용할 수 있어, 복잡한 조인이나 집계 작업의 중간 결과를 저장할 때 매우 유용합니다. 다만 한 세션에서 동일한 이름의 임시 테이블을 두 번 생성하면 오류가 발생하므로, 필요하다면 DROP TEMPORARY TABLE IF EXISTS 구문을 함께 활용하는 것이 좋습니다.