すべてのスキーマへのインストール
スキーマのリストを取得するには、show databases;
を使用します 。これを-- use
と組み合わせる :
use schemaA;
-- use schemaB;
-- use schemaC;
create procedure ...
スキーマを手動で繰り返し、use
を削除してコメントを解除します 先に進むと、すべてがうまくいくことを確認します。 MySQL Workbenchでは、Ctrl + Shift+Enterが友達です。
スキーマのサブセットへのルーチンのインストール
通常、保存されたルーチンをすべてにインストールする必要はありません。 サーバー上のスキーマ。ただし、サブセットのみ ---多くの場合、特定のストアドルーチンがすでにインストールされているスキーマのセットによって定義されます。次に、で説明されているように、 SO 、次のようなクエリを使用して、関連するスキーマの名前を取得できます。
SELECT ROUTINE_SCHEMA FROM `information_schema`.`ROUTINES` where specific_name = 'MyRoutine';
確認
ルーチンをデプロイした後、それらの存在を確認するには、次のようなクエリを使用できます。
SELECT distinct
r1.ROUTINE_SCHEMA,
case when r2.specific_name is not null then '' else '####' end as RoutineName1,
case when r3.specific_name is not null then '' else '####' end as RoutineName2,
case when r4.specific_name is not null then '' else '####' end as RoutineName3
FROM
`information_schema`.`ROUTINES` as r1
LEFT JOIN (select * from `information_schema`.`ROUTINES` where specific_name = 'RoutineName1') as r2 on r1.routine_schema = r2.routine_schema
LEFT JOIN (select * from `information_schema`.`ROUTINES` where specific_name = 'RoutineName2') as r3 on r1.routine_schema = r3.routine_schema
LEFT JOIN (select * from `information_schema`.`ROUTINES` where specific_name = 'RoutineName3') as r4 on r1.routine_schema = r4.routine_schema
where
r1.specific_name = 'FilteringRoutineName';
このクエリは、RoutineName1
かどうかを確認します 、RoutineName2
およびRoutineName3
ルーチンFilteringRoutineName
を持つサーバー上のデータベーススキーマに存在します 。ルーチンが欠落している場合は、####
でマークされます 。
もちろん、これは日常的な存在をチェックするだけです。それらの実装を検証するには、データベース差分ツール(MySQL Compareなど)が必要になる場合があります。