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

MySQLでストアドプロシージャの存在を確認するには?SHOW CREATE PROCEDUREの使い方

まず、動作確認用のサンプルとしてストアドプロシージャを作成しましょう。ここでは、指定した日付に任意の月数を加算した日付を返す「ExtenddatesWithMonthdemo」というプロシージャを作成します。

mysql> DELIMITER //
mysql> CREATE PROCEDURE ExtenddatesWithMonthdemo(IN date1 datetime, IN NumberOfMonth int )
    -> BEGIN
    -> SELECT DATE_ADD(date1,INTERVAL NumberOfMonth MONTH) AS ExtendDate;
    -> END;
    -> //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;

SHOW CREATE PROCEDUREで存在を確認する

ストアドプロシージャが存在するかどうかを確認するには、SHOW CREATE PROCEDUREコマンドを使用します。プロシージャが存在していればその定義内容が表示され、存在しない場合はエラーが返されます。

クエリは以下の通りです。

mysql> SHOW CREATE PROCEDURE ExtenddatesWithMonthdemo;

以下は、上記で作成したストアドプロシージャの詳細を表示した出力結果です。

+--------------------------+--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Procedure                | sql_mode                                   | Create Procedure                                                                                                                        | character_set_client | collation_connection | Database Collation |
+--------------------------+--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| ExtenddatesWithMonthdemo | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | CREATE DEFINER = `root`@`%` PROCEDURE `ExtenddatesWithMonthdemo`(IN date1 datetime, IN NumberOfMonth int )
BEGIN
SELECT DATE_ADD(date1,INTERVAL NumberOfMonth MONTH) AS ExtendDate;
END | utf8 | utf8_general_ci | utf8_general_ci |
+--------------------------+--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

このように、プロシージャ名やsql_mode、実際のCREATE文(Create Procedure列)、文字セットなどの情報が一覧で確認できます。

CALL文でストアドプロシージャを実行する

続いて、CALLコマンドを使用して、作成したストアドプロシージャを呼び出します。クエリは以下の通りです。

mysql> call ExtenddatesWithMonthdemo('2019-02-13',6);

出力結果

+---------------------+
| ExtendDate          |
+---------------------+
| 2019-08-13 00:00:00 |
+---------------------+
1 row in set (0.10 sec)
Query OK, 0 rows affected (0.12 sec)

2019年2月13日に6ヶ月を加算した「2019-08-13」が正しく返されていることがわかります。

information_schemaで存在チェックを行う方法(補足)

SHOW CREATE PROCEDUREは、対象が存在しない場合にエラーが発生します。エラーを避けて安全に存在チェックを行いたい場合は、information_schema.ROUTINESテーブルを参照する方法が便利です。

SELECT ROUTINE_NAME
FROM information_schema.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
  AND ROUTINE_SCHEMA = 'データベース名'
  AND ROUTINE_NAME = 'ExtenddatesWithMonthdemo';

このクエリは、該当するストアドプロシージャが存在する場合にのみ結果を返します。そのため、シェルスクリプトやアプリケーション内での条件分岐、プロシージャの再作成前のチェックなどにも幅広く活用できます。

  1. MySQLストアドプロシージャにおけるDELIMITERの正しい使い方を徹底解説

    DELIMITERとは?なぜ必要なのかMySQLクライアントは、デフォルトでセミコロン(;)を文の終端記号として扱います。しかし、ストアドプロシージャの本体には複数のSQL文が含まれ、それぞれがセミコロンで終わるため、そのまま定義すると途中で構文解析が中断されてしまいます。そこで、DELIMITERコマンドを使って、一時的に区切り文字を別の記号(例://)に変更する必要があります。これにより、プロシージャ全体をひとつのまとまりとして登録できるようになります。DELIMITERの正しい記述方法基本的な書き方は以下の通りです。DELIMITER //CREATE PROCEDURE yourSto

  2. MySQLのバージョンを確認する方法をわかりやすく解説

    この記事では、現在利用しているMySQLサーバーのバージョンを確認する方法について詳しく解説します。コンソールでクエリを実行する前に、まずクライアントがサーバーに正しく接続されていることを確認しておきましょう。接続が確立されていないと、クエリを実行しても結果を取得できません。MySQLのバージョンを確認する基本クエリ以下のクエリを実行すると、使用中のサーバーのバージョン番号と、実行時点の日付を同時に取得できます。mysql> SELECT VERSION(), CURRENT_DATE;ポイント: 関数「VERSION()」や「CURRENT_DATE」は大文字・小文字を区別しません。つ