MySQL에서 저장 프로시저(Stored Procedure)를 변경하려면 해당 프로시저에 대한 ALTER ROUTINE 권한이 필요하며, ALTER PROCEDURE 문을 사용하면 됩니다. 이 글에서는 'delete_studentinfo'라는 저장 프로시저를 예로 들어, 실제 변경 과정을 단계별로 살펴보겠습니다.
1단계: 기존 저장 프로시저 정의 확인
변경에 앞서 SHOW CREATE PROCEDURE 문을 실행하여 현재 저장 프로시저의 정의를 먼저 확인해 보겠습니다.
mysql> SHOW CREATE PROCEDURE Delete_studentinfo\G
*************************** 1. row ***************************
Procedure: Delete_studentinfo
sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_
ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `Delete_studentinfo`( IN p_id INT)
BEGIN
DELETE FROM student_info
WHERE ID=p_id;
END
character_set_client: cp850
collation_connection: cp850_general_ci
Database Collation: latin1_swedish_ci
1 row in set (0.01 sec)위 결과 집합을 보면 'delete_studentinfo' 저장 프로시저에는 아직 주석(COMMENT)이 설정되어 있지 않습니다.
2단계: ALTER PROCEDURE 문으로 주석 추가
이제 ALTER PROCEDURE 문을 사용하여 저장 프로시저에 주석을 추가해 보겠습니다.
mysql> ALTER PROCEDURE Delete_studentinfo
-> COMMENT 'deleting the record'//
Query OK, 0 rows affected (0.03 sec)쿼리가 성공적으로 실행되어 'Query OK' 메시지가 반환되었습니다.
3단계: 변경 결과 검증
주석이 실제로 추가되었는지 다시 SHOW CREATE PROCEDURE 문으로 확인할 수 있습니다.
mysql> SHOW CREATE PROCEDURE Delete_studentinfo\G
*************************** 1. row ***************************
Procedure: Delete_studentinfo
sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_
ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `Delete_studen
tinfo`( IN p_id INT)
COMMENT 'deleting the record'
BEGIN
DELETE FROM student_info
WHERE ID=p_id;
END
character_set_client: cp850
collation_connection: cp850_general_ci
Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)결과 집합에서 COMMENT 'deleting the record' 항목이 정상적으로 추가된 것을 확인할 수 있습니다.
참고: ALTER PROCEDURE의 한계
ALTER PROCEDURE 문은 주석(COMMENT), SQL SECURITY, DEFINER 같은 프로시저의 특성(characteristics)만 변경할 수 있습니다. 만약 프로시저의 본문(BODY) 자체를 수정해야 한다면, ALTER PROCEDURE로는 불가능하며 DROP PROCEDURE로 기존 프로시저를 삭제한 뒤 새로운 정의로 다시 생성해야 합니다.