MySQL オブジェクトへの依存関係を見つける方法を見つけようとしています。たとえば、関数は、ビュー、トリガー、ストアド プロシージャ、その他の関数で使用されます。それを実行できるクエリまたはツールの提案はありますか?
各タイプ、テーブル、ルーチン、およびビューの依存関係をロードするストアド プロシージャを作成しました。以下はテーブル用のものです:
CREATE PROCEDURE `sys_get_table_depends` (
p_object_name varchar(256)
)
BEGIN
SELECT
information_schema.routines.routine_type as `object_type`
,information_schema.routines.routine_name as `object_name`
,information_schema.routines.routine_definition as `object_definition`
FROM information_schema.tables
INNER
JOIN information_schema.routines
ON routines.routine_definition LIKE Concat('% ', tables.table_name, ' %') OR
routines.routine_definition LIKE Concat('%.', tables.table_name, ' %') OR
routines.routine_definition LIKE Concat('%`', tables.table_name, '`%')
where tables.table_name = p_object_name
UNION
SELECT
'trigger' as `object_type`
,concat(information_schema.triggers.event_object_table, information_schema.triggers.trigger_name) as `object_name`
,information_schema.triggers.ACTION_STATEMENT as `object_definition`
FROM information_schema.tables
INNER
JOIN information_schema.triggers
ON triggers.ACTION_STATEMENT LIKE Concat('% ', tables.table_name, ' %') OR
triggers.ACTION_STATEMENT LIKE Concat('%.', tables.table_name, ' %') OR
triggers.ACTION_STATEMENT LIKE Concat('%`', tables.table_name, '`%')
where tables.table_name = p_object_name
UNION
SELECT
'view' as `object_type`
,information_schema.views.table_name as `object_name`
,information_schema.views.view_definition as `object_definition`
FROM information_schema.tables
INNER
JOIN information_schema.views
ON views.view_definition LIKE Concat('% ', tables.table_name, ' %') OR
views.view_definition LIKE Concat('%.', tables.table_name, ' %') OR
views.view_definition LIKE Concat('%`', tables.table_name, '`%')
where tables.table_name = p_object_name;
END
しかし、すべてのオブジェクト定義が information_schema に格納されているわけではないようです。定義フィールドが空のものもあります。私の推測では、MySQL スキーマにあります。何か案は?