IN 매개변수란 무엇인가?
MySQL 저장 프로시저에서 IN 매개변수는 프로시저 외부에서 값을 전달받아 내부 로직에서 활용할 수 있게 해주는 입력용 파라미터입니다. 이번 글에서는 실제 예제 테이블을 통해 IN 매개변수를 사용하는 저장 프로시저를 만드는 방법을 단계별로 살펴보겠습니다.
예제 테이블 준비하기
설명을 돕기 위해 다음과 같은 데이터를 가진 student_info 테이블을 사용하겠습니다.
mysql> Select * from student_info; +-----+---------+------------+------------+ | id | Name | Address | Subject | +-----+---------+------------+------------+ | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Jaipur | Literature | | 110 | Rahul | Chandigarh | History | | 125 | Raman | Shimla | Computers | +-----+---------+------------+------------+ 4 rows in set (0.00 sec)
IN 매개변수가 포함된 저장 프로시저 생성하기
이제 아래 쿼리를 통해 학생 이름을 매개변수로 전달하면 해당 학생의 모든 정보를 조회해 주는 저장 프로시저를 생성해 보겠습니다.
mysql> DELIMITER // ;
mysql> Create PROCEDURE detail(IN S_Name VARCHAR(20))
-> BEGIN
-> SELECT * From Student_info WHERE Name = S_Name;
-> END //
Query OK, 0 rows affected (0.16 sec)
mysql> DELIMITER ;여기서 S_Name은 'detail'이라는 저장 프로시저의 IN 매개변수입니다. 프로시저 본문 안에서는 이 매개변수를 조건으로 사용하여 Name 컬럼과 일치하는 레코드만 조회합니다.
저장 프로시저 호출하기
생성된 프로시저는 CALL 문으로 실행할 수 있습니다. 예를 들어, 학생 'Gaurav'의 모든 세부 정보를 확인하고 싶다면 다음과 같이 호출하면 됩니다.
mysql> CALL detail('Gaurav');
+-----+--------+---------+------------+
| id | Name | Address | Subject |
+-----+--------+---------+------------+
| 105 | Gaurav | Jaipur | Literature |
+-----+--------+---------+------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)마찬가지로 다른 학생 이름을 인자로 넘기면 해당 학생의 정보만 출력됩니다.
mysql> CALL detail('Raman');
+-----+-------+---------+-----------+
| id | Name | Address | Subject |
+-----+-------+---------+-----------+
| 125 | Raman | Shimla | Computers |
+-----+-------+---------+-----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)정리
IN 매개변수를 활용하면 하나의 저장 프로시저를 재사용하면서 다양한 조건의 데이터를 손쉽게 조회할 수 있습니다. 위 예제처럼 이름을 입력값으로 받아 일치하는 학생 정보를 반환하는 방식은 실무에서도 자주 사용되는 패턴이므로, DELIMITER 변경부터 프로시저 생성과 호출까지의 흐름을 잘 익혀두시기 바랍니다.