sql >> Base de Datos >  >> RDS >> Mysql

Instalar procedimiento almacenado en múltiples bases de datos

Instalación en todos los esquemas

Para obtener una lista de los esquemas, use show databases; . Combine esto con -- use :

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

create procedure ...

Iterar manualmente a través de los esquemas, eliminando y descomentando use cláusulas a medida que avanza, comprobando que todo funciona. En MySQL Workbench, Ctrl+Shift+Enter es tu amigo.

Instalación de rutinas en un subconjunto de esquemas

Normalmente no desea instalar la rutina almacenada en todos esquemas en un servidor, pero solo en un subconjunto --- a menudo definido por el conjunto de esquemas que ya tienen instalada alguna rutina almacenada específica. Luego, como se discutió en SO , puede usar una consulta como esta para obtener los nombres de los esquemas relevantes:

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

Verificación

Después de implementar las rutinas, para verificar la existencia de las mismas, puede usar una 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á si RoutineName1 , RoutineName2 y RoutineName3 existen en los esquemas de la base de datos en su servidor que tienen la rutina FilteringRoutineName . Si falta una rutina, se marcará con #### .

Por supuesto, esto solo verifica la existencia de rutina. Para verificar su implementación, es posible que necesite una herramienta de comparación de bases de datos (como MySQL Compare o similar).