Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 조건에 따라 테이블 값을 조회하는 저장 프로시저 생성 방법

저장 프로시저로 조건부 조회 구현하기

MySQL에서는 INOUT 매개변수를 사용하는 저장 프로시저(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 문만 실행하면 되므로 코드의 재사용성과 유지보수성이 크게 향상됩니다.