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