sql >> データベース >  >> RDS >> Mysql

複数のデータベースにストアドプロシージャをインストールする

    すべてのスキーマへのインストール

    スキーマのリストを取得するには、show databases;を使用します 。これを-- useと組み合わせる :

    use schemaA;
    -- use schemaB;
    -- use schemaC;
    
    create procedure ...
    

    スキーマを手動で繰り返し、useを削除してコメントを解除します 先に進むと、すべてがうまくいくことを確認します。 MySQL Workbenchでは、Ctrl + Shift+Enterが友達です。

    スキーマのサブセットへのルーチンのインストール

    通常、保存されたルーチンをすべてにインストールする必要はありません。 サーバー上のスキーマ。ただし、サブセットのみ ---多くの場合、特定のストアドルーチンがすでにインストールされているスキーマのセットによって定義されます。次に、で説明されているように、 SO 、次のようなクエリを使用して、関連するスキーマの名前を取得できます。

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

    確認

    ルーチンをデプロイした後、それらの存在を確認するには、次のようなクエリを使用できます。

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

    このクエリは、RoutineName1かどうかを確認します 、RoutineName2 およびRoutineName3 ルーチンFilteringRoutineNameを持つサーバー上のデータベーススキーマに存在します 。ルーチンが欠落している場合は、####でマークされます 。

    もちろん、これは日常的な存在をチェックするだけです。それらの実装を検証するには、データベース差分ツール(MySQL Compareなど)が必要になる場合があります。



    1. MySQLからSQLServerへの移行

    2. SQLDev4.2トップSQL

    3. 特定の順序でmysqlクエリ結果を一覧表示する方法は?

    4. Oracle.ManagedDataAccess.EntityFramework-ORA-01918:ユーザー'dbo'は存在しません