MySQL でストアドプロシージャやユーザー定義関数を検索する

既存のデータベース内の、ストアドプロシージャやユーザー定義関数を検索したいような時ありませんか?

ここでは、MySQL で指定したキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索する方法をご説明します。


MySQL でストアドプロシージャや関数を検索する

MySQL で指定したキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索するには INFORMATION_SCHEMA.ROUTINES テーブルが使えます。

INFORMATION_SCHEMA のテーブル達は MySQL サーバのデータベース、テーブル、カラム、ストアドルーチンなどの情報が参照できるテーブルです。


INFORMATION_SCHEMA.ROUTINES テーブルを使って、指定したキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索するクエリーは次の通りです。

SELECT 	ROUTINE_NAME,
		ROUTINE_TYPE,
		ROUTINE_DEFINITION
FROM 	INFORMATION_SCHEMA.ROUTINES
WHERE	ROUTINE_SCHEMA = 'データベース名'
		AND ROUTINE_DEFINITION LIKE '%キーワード%'
ORDER BY ROUTINE_NAME;

ROUTINE_SCHEMA はそのルーチン(ストアドプロシージャ・ユーザー定義関数)のあるデータベース名です。

ROUTINE_NAME はストアドプロシージャやユーザー定義関数名です。

ROUTINE_TYPE はルーチンのタイプで、ストアドプロシージャの時は PROCEDURE が、ユーザー定義関数の時は FUNCTION です。

ROUTINE_DEFINITION にはそのルーチンの定義です。

INFORMATION_SCHEMA.ROUTINES テーブルには、戻り値の情報や、作成日・最終更新日など、他にもストアドルーチンの情報がいろいろ保持されていますので、必要に応じてお使いください。


実際に INFORMATION_SCHEMA.ROUTINES テーブルを使って検索してみます。

例えば、test_db という名前のデータベース内の IF というキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索したい時は次のようにできます。

SELECT 	ROUTINE_NAME,
		ROUTINE_TYPE,
		ROUTINE_DEFINITION
FROM 	INFORMATION_SCHEMA.ROUTINES
WHERE	ROUTINE_SCHEMA = 'test_db'
		AND ROUTINE_DEFINITION LIKE '%IF%'
ORDER BY ROUTINE_NAME;

[実行結果]

MySQL でストアドプロシージャや関数を検索する 1

test_db データベースには、定義に IF を含むストアドプロシージャが 2 つ、ユーザー定義関数がひとつありました。


以上、MySQL で指定したキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索する方法をご説明しました。

© 2024 MySQL 入門