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