MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLストアドプロシージャの変更方法:ALTER PROCEDUREステートメントの使い方

MySQLでは、ALTER PROCEDUREステートメントを使うことで、既存のストアドプロシージャの特性(コメントなど)を変更できます。ただし、この操作を行うには、対象のプロシージャに対するALTER ROUTINE権限が必要です。

ここでは、ストアドプロシージャ「delete_studentinfo」を例に、実際の変更手順を見ていきましょう。このプロシージャは、指定したIDの学生情報を削除するもので、以下のようなCREATE文で定義されています。

変更前のストアドプロシージャを確認する

まず、SHOW CREATE PROCEDUREステートメントで現在の定義内容を確認します。

mysql> SHOW CREATE PROCEDURE Delete_studentinfo\G
*************************** 1. row ***************************
        Procedure: Delete_studentinfo
        sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_
ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
 Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `Delete_studentinfo`( IN p_id INT)
BEGIN
DELETE FROM student_info
WHERE ID=p_id;
END
character_set_client: cp850
collation_connection: cp850_general_ci
 Database Collation: latin1_swedish_ci
1 row in set (0.01 sec)

上記の出力結果から、「delete_studentinfo」にはまだコメントが設定されていないことがわかります。

ALTER PROCEDUREでコメントを追加する

次に、ALTER PROCEDUREステートメントを使って、プロシージャにコメントを追加してみましょう。

mysql> ALTER PROCEDURE Delete_studentinfo
    -> COMMENT 'deleting the record'//
Query OK, 0 rows affected (0.03 sec)

「Query OK」と表示されれば、変更は正常に完了しています。

変更結果を確認する

再度SHOW CREATE PROCEDUREステートメントを実行し、コメントが正しく追加されたかどうかを確認します。

mysql> SHOW CREATE PROCEDURE Delete_studentinfo\G
*************************** 1. row ***************************
        Procedure: Delete_studentinfo
        sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_
ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
 Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `Delete_studen
tinfo`( IN p_id INT)
    COMMENT 'deleting the record'
BEGIN
DELETE FROM student_info
WHERE ID=p_id;
END
character_set_client: cp850
collation_connection: cp850_general_ci
 Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)

出力結果に「COMMENT 'deleting the record'」という行が表示されており、コメントが正常に追加されたことが確認できます。

まとめ

ALTER PROCEDUREステートメントを使用すれば、ストアドプロシージャの本体(BEGIN〜END内の処理)を書き換えることなく、コメントなどの特性だけを簡単に変更できます。なお、処理内容そのものを修正したい場合は、DROP PROCEDUREで一度削除してから再作成するか、CREATE OR REPLACEが利用できる環境では置き換えを行う必要があります。運用時には、どの方法で変更するのかを状況に応じて使い分けると良いでしょう。

  1. MySQLストアド関数の変更方法|ALTER FUNCTIONステートメントの使い方を解説

    MySQLのストアド関数(ストアドファンクション)を変更するには、ALTER FUNCTIONステートメントを使用します。このステートメントを実行するには、あらかじめALTER ROUTINE権限が付与されている必要があります。ALTER FUNCTIONの基本構文ALTER FUNCTION function_name [characteristic ...] characteristic: { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER

  2. MySQLストアドプロシージャでテーブルを作成する方法

    MySQLでは、ストアドプロシージャの中にCREATE TABLE文を組み込むことで、テーブル作成処理を自動化できます。本記事では、Id・UserFirstName・UserLastNameの3つのカラムを持つテーブル「DemoTable」を作成するストアドプロシージャの作成から実行までの手順を解説します。 1. ストアドプロシージャの作成 まずDELIMITERコマンドで区切り文字を「//」に変更します。これは、プロシージャ内のセミコロン(;)が通常のSQL文の終端として誤認識されるのを防ぐためです。続いて、BEGIN〜ENDブロック内にCREATE TABLE文を記述します。 mys