MySQL에서 이미 생성된 저장 함수(Stored Function)의 특성을 수정해야 할 때가 있습니다. 이때 ALTER ROUTINE 권한이 있다면 ALTER FUNCTION 문을 사용하여 저장 함수를 변경할 수 있습니다.
ALTER FUNCTION 기본 문법
ALTER FUNCTION function_name [characteristic ...]
characteristic:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'여기서 function_name은 변경하고자 하는 저장 함수의 이름입니다.
ALTER FUNCTION으로 변경 가능한 항목
ALTER FUNCTION 문은 위 문법에 정의된 특성(characteristics)들을 변경하는 데 사용됩니다. 하나의 ALTER FUNCTION 문에서 여러 가지 변경 사항을 동시에 지정할 수도 있습니다.
다만 주의할 점은, 이 문으로는 함수의 매개변수(parameter)나 본문(body)은 변경할 수 없다는 것입니다. 매개변수나 로직 자체를 수정하려면 함수를 삭제한 후 다시 생성해야 합니다.
예제: factorial 함수에 주석(COMMENT) 추가하기
아래 예제에서는 'factorial'이라는 저장 함수에 주석을 추가하는 과정을 보여줍니다.
mysql> ALTER FUNCTION factorial COMMENT 'Can accept fraction values';
Query OK, 0 rows affected (0.00 sec)
mysql> Show Create Function factorial\G
*************************** 1. row ***************************
Function: factorial
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 Function: CREATE DEFINER=`root`@`localhost` FUNCTION `factorial`(n DECIMAL(3,0)) RETURNS decimal(20,0)
DETERMINISTIC
COMMENT 'Can accept fraction values'
BEGIN
DECLARE factorial DECIMAL(20,0) DEFAULT 1;
DECLARE counter DECIMAL(3,0);
SET counter = n;
factorial_loop: REPEAT
SET factorial = factorial * counter;
SET counter = counter - 1;
UNTIL counter = 1
END REPEAT;
RETURN factorial;
END
character_set_client: cp850
collation_connection: cp850_general_ci
Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)출력된 CREATE FUNCTION 결과를 살펴보면 'factorial' 함수 정의에 COMMENT 'Can accept fraction values'가 성공적으로 추가된 것을 확인할 수 있습니다. 이처럼 ALTER FUNCTION 문을 활용하면 함수를 재생성하지 않고도 주석, SQL 보안 방식(SQL SECURITY) 등 다양한 특성을 손쉽게 변경할 수 있습니다.