sql >> Database >  >> RDS >> Mysql

Opgeslagen procedure installeren op meerdere databases

Installeren in alle schema's

Gebruik show databases; . om een ​​lijst van de schema's te krijgen . Combineer dit met -- use :

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

create procedure ...

Herhaal handmatig de schema's, verwijder use . en verwijder de commentaar ervan clausules terwijl je verder gaat, controleren of alles werkt. In MySQL Workbench is Ctrl+Shift+Enter je vriend.

Het installeren van routines in een subset van schema's

Normaal gesproken wil je de opgeslagen routine niet installeren in all schema's op een server, maar alleen in een subset --- vaak gedefinieerd door de reeks schema's waarop al een specifieke opgeslagen routine is geïnstalleerd. Vervolgens zoals besproken op DUS , kunt u een zoekopdracht als deze gebruiken om de namen van de relevante schema's te krijgen:

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

Verificatie

Na het implementeren van routines, om het bestaan ​​ervan te verifiëren, kunt u een query als deze gebruiken:

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

Deze query controleert of RoutineName1 , RoutineName2 en RoutineName3 bestaan ​​in de databaseschema's op uw server met de routine FilteringRoutineName . Als een routine ontbreekt, wordt deze gemarkeerd met #### .

Dit controleert natuurlijk alleen op routinematig bestaan. Om hun implementatie te verifiëren, hebt u mogelijk een database-diff-tool nodig (zoals MySQL Compare of iets dergelijks).



  1. Wat is het beste hulpmiddel om twee SQL Server-databases (schema en gegevens) te vergelijken?

  2. Hoe NULL-waarden in datetime-velden in MySQL op te slaan?

  3. Java - Gegevens ophalen uit de MySQL-database

  4. Vereist om deel te nemen aan 2 tafels met hun FK's in een 3e tafel