Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Installieren Sie gespeicherte Prozeduren in mehreren Datenbanken

In allen Schemas installieren

Um eine Liste der Schemas zu erhalten, verwenden Sie show databases; . Kombinieren Sie dies mit -- use :

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

create procedure ...

Durchlaufen Sie die Schemas manuell, indem Sie use entfernen und auskommentieren Klauseln, während Sie weitermachen und überprüfen, ob alles funktioniert. In MySQL Workbench ist Strg+Shift+Enter Ihr Freund.

Installieren von Routinen in einer Teilmenge von Schemas

Normalerweise möchten Sie die gespeicherte Routine nicht in allen installieren Schemas auf einem Server, aber nur in einer Teilmenge --- oft definiert durch den Satz von Schemas, die bereits eine bestimmte gespeicherte Routine installiert haben. Dann wie besprochen SO , können Sie eine Abfrage wie diese verwenden, um die Namen der relevanten Schemas zu erhalten:

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

Verifizierung

Nach dem Bereitstellen von Routinen können Sie eine Abfrage wie diese verwenden, um ihre Existenz zu überprüfen:

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

Diese Abfrage prüft, ob RoutineName1 , RoutineName2 und RoutineName3 in den Datenbankschemata auf Ihrem Server existieren, die die Routine FilteringRoutineName haben . Fehlt eine Routine, wird sie mit #### gekennzeichnet .

Dies prüft natürlich nur die routinemäßige Existenz. Um ihre Implementierung zu überprüfen, benötigen Sie möglicherweise ein Datenbank-Diff-Tool (wie MySQL Compare oder ähnliches).