ALTER PROCEDUREは、ストアドプロシージャの1つまたは複数の特性を変更するために使用します。
ALTER PROCEDUREの構文は次のとおりです:
ALTER PROCEDURE proc_name [characteristic ...]
characteristic: {
COMMENT 'string'
| LANGUAGE SQL
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
ALTER PROCEDUREステートメントは、ストアドプロシージャのパラメータや本体を変更するためには使用できません。このような変更が必要な場合は、DROP PROCEDUREとCREATE PROCEDUREを使用してプロシージャを削除し、再度作成する必要があります。
対象のプロシージャに対するALTER PROCEDURE権限が付与されている必要があります。デフォルトでは、この権限はプロシージャの作成者に自動的に付与されます。
ルーチンがデータを扱う特性に関する情報は以下のとおりです:
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 PROCEDUREの例は以下のとおりです:
obclient> ALTER PROCEDURE proc_name LANGUAGE SQL READS SQL DATA SQL SECURITY INVOKER COMMENT '例';
Query OK, 0 rows affected