Mysql
 sql >> Database >  >> RDS >> Mysql

Installa Stored Procedure su più database

Installazione in tutti gli schemi

Per ottenere un elenco degli schemi, usa show databases; . Combina questo con -- use :

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

create procedure ...

Scorri manualmente gli schemi, rimuovendo e decommentando use clausole mentre vai avanti, controllando che tutto funzioni. In MySQL Workbench, Ctrl+Maiusc+Invio è tuo amico.

Installazione di routine in un sottoinsieme di schemi

Normalmente non vuoi installare la routine memorizzata in tutti schemi su un server, ma solo in un sottoinsieme --- spesso definito dall'insieme di schemi che hanno già installato una specifica routine memorizzata. Quindi, come discusso su COSÌ , puoi utilizzare una query come questa per ottenere i nomi degli schemi rilevanti:

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

Verifica

Dopo aver distribuito le routine, per verificarne l'esistenza, puoi utilizzare una query come questa:

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

Questa query verificherà se RoutineName1 , RoutineName2 e RoutineName3 esistono negli schemi del database sul tuo server che hanno la routine FilteringRoutineName . Se manca una routine, sarà contrassegnata con #### .

Naturalmente, questo controlla solo l'esistenza di routine. Per verificarne l'implementazione, potresti aver bisogno di uno strumento di database diff (come MySQL Compare o simili).