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

Installer lagret procedure på flere databaser

Installation i alle skemaer

For at få en liste over skemaerne, brug show databases; . Kombiner dette med -- use :

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

create procedure ...

Gentag manuelt gennem skemaerne, fjern og fjern kommentar use klausuler, mens du går videre, og kontrollerer, at alt fungerer. I MySQL Workbench er Ctrl+Shift+Enter din ven.

Installation af rutiner i et undersæt af skemaer

Normalt ønsker du ikke at installere den lagrede rutine i alle skemaer på en server, men kun i et undersæt --- ofte defineret af det sæt af skemaer, som allerede har en bestemt lagret rutine installeret. Derefter, som diskuteret på SÅ , kan du bruge en forespørgsel som denne for at få navnene på de relevante skemaer:

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

Bekræftelse

Efter implementering af rutiner, for at bekræfte eksistensen af ​​dem, kan du bruge en forespørgsel som denne:

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

Denne forespørgsel vil kontrollere, om RoutineName1 , RoutineName2 og RoutineName3 findes i databaseskemaerne på din server, som har rutinen FilteringRoutineName . Hvis en rutine mangler, vil den blive markeret med #### .

Dette kontrollerer naturligvis kun for rutinemæssig eksistens. For at verificere deres implementering skal du muligvis bruge et databasediff-værktøj (såsom MySQL Compare eller lignende).



  1. Mysql, PHP, søger efter flere ord

  2. Variationer i PostgreSQL LIKE-forespørgselsydeevne

  3. Oprettelse af en Java-applikation i Oracle JDeveloper, del 2

  4. MySQL binær vs char tegnsæt binær