저장 프로시저로 조건부 조회 구현하기
MySQL에서는 IN과 OUT 매개변수를 사용하는 저장 프로시저(Stored Procedure)를 생성하여, 테이블에서 특정 조건에 맞는 레코드를 손쉽게 선택할 수 있습니다. 이해를 돕기 위해 다음과 같은 데이터를 가진 '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 | Bangalore | Computers | +------+---------+------------+------------+ 4 rows in set (0.01 sec)
1단계: 저장 프로시저 생성
아래와 같이 'select_studentinfo'라는 이름의 프로시저를 생성하면, 'id' 값을 입력받아 해당 학생의 이름, 주소, 과목을 'student_info' 테이블에서 조회할 수 있습니다.
mysql> DELIMITER // ;
mysql> Create Procedure Select_studentinfo ( IN p_id INT, OUT p_name varchar(20),OUT p_address varchar(20), OUT p_subject varchar(20))
-> BEGIN
-> SELECT name, address, subject INTO p_name, p_address, p_subject
-> FROM student_info
-> WHERE id = p_id;
-> END //
Query OK, 0 rows affected (0.03 sec)2단계: 프로시저 호출 및 결과 확인
프로시저가 정상적으로 생성되었다면, 이제 조건으로 사용할 값(id)을 전달하며 CALL 문으로 프로시저를 호출합니다.
mysql> DELIMITER ; // mysql> CALL Select_studentinfo(110, @p_name, @p_address, @p_subject); Query OK, 1 row affected (0.06 sec) mysql> Select @p_name AS Name,@p_Address AS Address, @p_subject AS Subject; +--------+------------+-----------+ | Name | Address | Subject | +--------+------------+-----------+ | Rahul | Chandigarh | History | +--------+------------+-----------+ 1 row in set (0.00 sec)
실행 결과를 보면, id가 110인 학생의 정보가 OUT 매개변수(@p_name, @p_address, @p_subject)에 저장되고, SELECT 문으로 이를 확인할 수 있습니다. 즉, 이름 'Rahul', 주소 'Chandigarh', 과목 'History'가 성공적으로 반환된 것입니다.
IN과 OUT 매개변수의 역할
- IN(p_id): 프로시저 외부에서 내부로 값을 전달하는 입력 매개변수입니다. 여기서는 조회 조건이 될 학생의 id를 받습니다.
- OUT(p_name, p_address, p_subject): 프로시저 내부의 처리 결과를 외부로 반환하는 출력 매개변수입니다. SELECT ... INTO 구문을 통해 조회된 값이 각 변수에 저장됩니다.
이처럼 저장 프로시저를 활용하면 반복적인 조회 쿼리를 하나의 객체로 관리할 수 있으며, 애플리케이션에서는 단순히 CALL 문만 실행하면 되므로 코드의 재사용성과 유지보수성이 크게 향상됩니다.