ALTER FUNCTION ステートメントは、ストアド関数の1つまたは複数の特性を変更するために使用します。
ALTER FUNCTION ステートメントの構文は以下のとおりです:
ALTER FUNCTION func_name [characteristic ...]
characteristic: {
COMMENT 'string'
| LANGUAGE SQL
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
ALTER FUNCTION ステートメントは、ストアド関数のパラメータや本体を変更するためには使用できません。そのような変更が必要な場合は、DROP FUNCTION と CREATE FUNCTION を使用して関数を削除し、再作成する必要があります。
関数に対する ALTER ROUTINE 権限が付与されている必要があります。デフォルトでは、この権限は関数の作成者に自動的に付与されます。
ルーチンがデータを使用する特性に関する情報は以下のとおりです:
CONTAINS SQLは、ルーチンにデータの読み書きを行うステートメントが含まれないことを示します。これがデフォルト値です。例えば、SET@x=1またはDO RELEASE_LOCK('abc')は実行されますが、データを読み書きしません。NO SQLは、ルーチンにSQLステートメントが含まれないことを示します。READS SQL DATAは、ルーチンにデータを読み取るステートメント(例:SELECT)が含まれることを示しますが、データを書き込むステートメントは含まれません。MODIFIES SQL DATAは、ルーチンにデータを書き込む可能性のあるステートメント(例:INSERTまたはDELETE)が含まれることを示します。
SQL SECURITY は DEFINER または INVOKER のいずれかに設定でき、ルーチンが指定されたユーザー(このユーザーはルーチンに関連付けられたデータベースへのアクセス権限を持っている必要があります)の権限で実行されるか、呼び出し元の権限で実行されるかを指定します。デフォルト値は DEFINER です。ルーチンを呼び出すユーザーは、そのルーチンに対する EXECUTE 権限を持っている必要があります。
ALTER FUNCTION の例は以下のとおりです:
obclient> ALTER FUNCTION my_func LANGUAGE SQL READS SQL DATA COMMENT '例';
Query OK, 0 rows affected