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;
[実行結果]
test_db データベースには、定義に IF を含むストアドプロシージャが 2 つ、ユーザー定義関数がひとつありました。
以上、MySQL で指定したキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索する方法をご説明しました。