Mysql
 sql >> Base de données >  >> RDS >> Mysql

Installer la procédure stockée sur plusieurs bases de données

Installation dans tous les schémas

Pour obtenir une liste des schémas, utilisez show databases; . Combinez ceci avec -- use :

use schemaA;
-- use schemaB;
-- use schemaC;

create procedure ...

Parcourez manuellement les schémas, en supprimant et en décommentant use clauses au fur et à mesure que vous avancez, en vérifiant que tout fonctionne. Dans MySQL Workbench, Ctrl+Maj+Entrée est votre ami.

Installer des routines dans un sous-ensemble de schémas

Normalement, vous ne voulez pas installer la routine stockée dans tous schémas sur un serveur, mais uniquement dans un sous-ensemble --- souvent défini par l'ensemble de schémas sur lesquels une routine stockée spécifique est déjà installée. Ensuite, comme indiqué sur SO , vous pouvez utiliser une requête comme celle-ci pour obtenir les noms des schémas pertinents :

SELECT ROUTINE_SCHEMA FROM `information_schema`.`ROUTINES` where specific_name = 'MyRoutine'; 

Vérification

Après avoir déployé des routines, pour vérifier leur existence, vous pouvez utiliser une requête comme celle-ci :

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'; 

Cette requête vérifiera si RoutineName1 , RoutineName2 et RoutineName3 existent dans les schémas de base de données sur votre serveur qui ont la routine FilteringRoutineName . Si une routine est manquante, elle sera marquée avec #### .

Bien sûr, cela ne vérifie que l'existence de la routine. Pour vérifier leur implémentation, vous aurez peut-être besoin d'un outil de comparaison de base de données (tel que MySQL Compare ou similaire).