MySQL에서는 저장 프로시저(Stored Procedure) 내부에 SELECT * FROM 테이블명 쿼리를 작성하여 테이블의 전체 데이터를 간편하게 조회할 수 있습니다. 이 글에서는 테이블 생성부터 저장 프로시저 작성과 호출까지, 실제 실행 결과와 함께 단계별로 살펴보겠습니다.
1. 예제용 테이블 생성
먼저 학생 정보를 담을 테이블을 만들어 보겠습니다. 아래 쿼리는 자동 증가(AUTO_INCREMENT)되는 기본키와 학생 이름 컬럼으로 구성되어 있습니다.
mysql> create table DemoTable654 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentFirstName varchar(100) ); Query OK, 0 rows affected (0.70 sec)
2. 샘플 데이터 삽입
INSERT 문을 사용해 테스트용 레코드를 여러 개 추가합니다.
mysql> insert into DemoTable654(StudentFirstName) values('John');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable654(StudentFirstName) values('Sam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable654(StudentFirstName) values('Mike');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable654(StudentFirstName) values('Robert');
Query OK, 1 row affected (0.12 sec)
삽입된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable654;
실행 결과는 다음과 같습니다.
+-----------+------------------+ | StudentId | StudentFirstName | +-----------+------------------+ | 1 | John | | 2 | Sam | | 3 | Mike | | 4 | Robert | +-----------+------------------+ 4 rows in set (0.00 sec)
3. 전체 테이블을 조회하는 저장 프로시저 생성
이제 테이블의 모든 레코드를 반환하는 저장 프로시저를 만들어 보겠습니다. 여러 SQL 문을 하나의 블록으로 묶기 위해 먼저 구분자(DELIMITER)를 //로 변경한 후, BEGIN ... END 블록 안에 SELECT 문을 작성합니다.
mysql> DELIMITER // mysql> CREATE PROCEDURE getWholeTable() BEGIN SELECT *FROM DemoTable654; END // Query OK, 0 rows affected (0.16 sec) mysql> DELIMITER ;
참고: 프로시저 본문 내부의 세미콜론(;)이 MySQL 클라이언트에 의해 잘못 해석되지 않도록 DELIMITER를 임시로 변경하는 것이며, 프로시저 생성이 끝나면 반드시 원래 구분자인 세미콜론으로 되돌려야 합니다.
4. 저장 프로시저 호출하기
생성된 프로시저는 CALL 명령으로 실행할 수 있습니다.
mysql> call getWholeTable();
실행하면 다음과 같이 테이블의 전체 데이터가 출력됩니다.
+-----------+------------------+ | StudentId | StudentFirstName | +-----------+------------------+ | 1 | John | | 2 | Sam | | 3 | Mike | | 4 | Robert | +-----------+------------------+ 4 rows in set (0.08 sec) Query OK, 0 rows affected (0.13 sec)
핵심 정리
- 저장 프로시저 안에서
SELECT *를 사용하면 해당 테이블의 전체 데이터를 그대로 반환할 수 있습니다. - 프로시저 본문은
BEGIN ... END블록으로 감싸며, 충돌을 피하기 위해DELIMITER를 변경해 주는 것이 좋습니다. - 완성된 프로시저는
CALL 프로시저명();형태로 언제든 재사용할 수 있어, 반복적인 조회 작업을 효율적으로 처리할 수 있습니다.