MySQL에서는 IN 매개변수를 사용하는 저장 프로시저(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)
저장 프로시저 생성하기
이제 Update_studentinfo라는 이름의 저장 프로시저를 아래와 같이 생성하면, student_info 테이블의 값을 업데이트할 수 있습니다. 프로시저는 학생 ID(p_id)와 새 주소(p_address) 두 개의 IN 매개변수를 받도록 작성했습니다.
mysql> DELIMITER // ;
mysql> Create Procedure Update_studentinfo ( IN p_id INT, IN p_address varchar(20))
-> BEGIN
-> UPDATE student_info
-> SET
-> address = p_address WHERE id = p_id;
-> END //
Query OK, 0 rows affected (0.13 sec)코드 설명
- DELIMITER // : 프로시저 내부의 세미콜론(;)이 SQL 종료 문자로 해석되지 않도록 구분 기호를 변경합니다.
- IN 매개변수 : 프로시저 호출 시 외부에서 값을 전달받아 쿼리에 사용합니다.
- UPDATE 문 : 전달받은
p_id에 해당하는 레코드의address값을p_address로 변경합니다.
프로시저 호출 및 결과 확인
프로시저 생성이 완료되면 구분 기호를 원래대로 되돌린 후, 업데이트하고자 하는 값을 인자로 전달하여 프로시저를 호출합니다.
mysql> Delimiter ; // mysql> CALL Update_studentinfo(125, 'Shimla'); Query OK, 1 row affected (0.14 sec) 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)
위 실행 결과를 보면, id = 125인 레코드의 주소가 'Bangalore'에서 'Shimla'로 성공적으로 변경된 것을 확인할 수 있습니다. 이처럼 저장 프로시저를 활용하면 반복적인 UPDATE 쿼리를 매개변수만 바꿔 재사용할 수 있어 코드 관리가 훨씬 효율적입니다.