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

MySQL 저장 함수 변경 방법 – ALTER FUNCTION 사용법 총정리

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) 등 다양한 특성을 손쉽게 변경할 수 있습니다.