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 'Example';
Query OK, 0 rows affected