sql >> Databasteknik >  >> RDS >> Mysql

Installera lagrad procedur på flera databaser

Installerar i alla scheman

För att få en lista över scheman, använd show databases; . Kombinera detta med -- use :

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

create procedure ...

Iterera manuellt genom scheman, ta bort och avkommentar use klausuler när du går vidare, kontrollera att allt fungerar. I MySQL Workbench är Ctrl+Skift+Enter din vän.

Installera rutiner i en delmängd av scheman

Normalt vill du inte installera den lagrade rutinen i alla scheman på en server, men bara i en delmängd --- definieras ofta av uppsättningen scheman som redan har någon specifik lagrad rutin installerad. Sedan, som diskuterats på SÅ , kan du använda en fråga som denna för att få namnen på de relevanta schemana:

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

Verifiering

Efter att ha distribuerat rutiner, för att verifiera att de finns, kan du använda en fråga som denna:

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

Den här frågan kommer att kontrollera om RoutineName1 , RoutineName2 och RoutineName3 finns i databasscheman på din server som har rutinen FilteringRoutineName . Om en rutin saknas kommer den att markeras med #### .

Naturligtvis kontrollerar detta bara för rutinmässig existens. För att verifiera deras implementering kan du behöva ett databasdiff-verktyg (som MySQL Compare eller liknande).



  1. mysql alfabetisk ordning

  2. RuntimeError:OperationalError:(2003, Kan inte ansluta till MySQL-servern på 'instansens IP-adress'

  3. INFOGA och VÄLJ i en enda fråga MySQL

  4. Lokal Firebird db replikering/synkronisering till online db