MySQL에서는 저장 프로시저(Stored Procedure) 내부에 SELECT 문을 작성하여 조건에 맞는 전체 테이블 데이터를 손쉽게 반환할 수 있습니다. 이번 글에서는 테이블 생성부터 데이터 삽입, 저장 프로시저 작성 및 호출까지 전 과정을 예제와 함께 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다. 학생 ID는 자동 증가(AUTO_INCREMENT) 기본 키로 설정합니다.
mysql> create table DemoTable1971
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(20),
StudentPassword int
);
Query OK, 0 rows affected (0.00 sec)
2. 샘플 데이터 삽입하기
INSERT 명령어를 사용하여 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable1971(StudentName,StudentPassword) values('John','123456');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1971(StudentName,StudentPassword) values('Chris','123456');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1971(StudentName,StudentPassword) values('David','123456');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1971(StudentName,StudentPassword) values('Mike','123456');
Query OK, 1 row affected (0.00 sec)
3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1971;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-----------+-------------+-----------------+ | StudentId | StudentName | StudentPassword | +-----------+-------------+-----------------+ | 1 | John | 123456 | | 2 | Chris | 123456 | | 3 | David | 123456 | | 4 | Mike | 123456 | +-----------+-------------+-----------------+ 4 rows in set (0.00 sec)
4. 저장 프로시저 생성하기
이제 파라미터로 받은 비밀번호와 일치하는 학생 정보를 전체 조회하는 저장 프로시저를 생성합니다. 프로시저 본문 내에서 세미콜론(;)을 사용하므로, 먼저 delimiter //로 구분자를 변경한 후 작성하고, 완료되면 원래 구분자로 되돌려야 합니다.
mysql> delimiter //
mysql> create procedure returnAll(pass varchar(30))
begin
select * from DemoTable1971 where StudentPassword=pass;
end
//
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
5. 저장 프로시저 호출하기
생성된 저장 프로시저는 CALL 명령어를 사용하여 호출할 수 있습니다.
mysql> call returnAll('123456');
프로시저가 정상적으로 실행되면 조건에 일치하는 전체 테이블 데이터가 아래와 같이 출력됩니다.
+-----------+-------------+-----------------+ | StudentId | StudentName | StudentPassword | +-----------+-------------+-----------------+ | 1 | John | 123456 | | 2 | Chris | 123456 | | 3 | David | 123456 | | 4 | Mike | 123456 | +-----------+-------------+-----------------+ 4 rows in set (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec)
정리
이처럼 MySQL 저장 프로시저 안에 SELECT 문을 포함하면, 반복적으로 사용하는 조회 로직을 하나의 프로시저로 캡슐화할 수 있습니다. 파라미터를 활용하면 특정 조건에 맞는 데이터만 유연하게 반환할 수 있어 코드 재사용성과 유지보수성이 크게 향상됩니다.