Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Instalar procedimento armazenado em vários bancos de dados


Instalando em todos os esquemas

Para obter uma lista dos esquemas, use show databases; . Combine isso com -- use :
use schemaA;
-- use schemaB;
-- use schemaC;

create procedure ...

Itere manualmente pelos esquemas, removendo e descomentando use cláusulas à medida que avança, verificando se tudo funciona. No MySQL Workbench, Ctrl+Shift+Enter é seu amigo.

Instalando rotinas em um subconjunto de esquemas

Normalmente você não deseja instalar a rotina armazenada em todos esquemas em um servidor, mas apenas em um subconjunto --- geralmente definido pelo conjunto de esquemas que já possuem alguma rotina armazenada específica instalada. Em seguida, conforme discutido em SO , você pode usar uma consulta como esta para obter os nomes dos esquemas relevantes:
SELECT ROUTINE_SCHEMA FROM `information_schema`.`ROUTINES` where specific_name = 'MyRoutine'; 

Verificação

Após a implantação das rotinas, para verificar a existência delas, você pode usar uma consulta como esta:
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'; 

Esta consulta verificará se RoutineName1 , RoutineName2 e RoutineName3 existem nos esquemas de banco de dados em seu servidor que possuem a rotina FilteringRoutineName . Se uma rotina estiver faltando, ela será marcada com #### .

Claro, isso apenas verifica a existência de rotina. Para verificar sua implementação, você pode precisar de uma ferramenta de comparação de banco de dados (como MySQL Compare ou similar).