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

Mysqlは、複数のストアドプロシージャからストアドプロシージャを作成します

    上記の機能はMySQLには実装されていないと思います。 こちら を参照してください。 詳細については。

    私は次の解決策を思いついた。しかし、それがこの問題への最善のアプローチであるかどうかはわかりません。

    DELIMITER //
    CREATE PROCEDURE pro_1(IN param1 data_type,IN param2 data_type);
    BEGIN
       CREATE TEMPORARY TABLE temp1 AS SELECT * FROM table_name WHERE $where1;
    COMMIT;
    END //
    DELIMITER ;
    

    上記のように、次の2つの手順を作成できます。

    DELIMITER //
    CREATE PROCEDURE pro_2(IN param1 data_type,IN param2 data_type);
    BEGIN
       CREATE TEMPORARY TABLE temp2 AS SELECT * FROM table_name WHERE $where2;
    COMMIT;
    END //
    DELIMITER ;
    
    DELIMITER //
    CREATE PROCEDURE pro_3(IN param1 data_type,IN param2 data_type);
    BEGIN
       CREATE TEMPORARY TABLE temp3 AS SELECT * FROM table_name WHERE $where3;
    COMMIT;
    END //
    DELIMITER ;
    

    したがって、以下は上記の3つの手順を組み合わせたマスター手順です。

    DELIMITER //
    CREATE PROCEDURE master_pro(IN param1 data_type,IN param2 data_type);
    BEGIN
       CALL pro_1(param1,param2);
       CALL pro_2(param1,param2);
       CALL pro_3(param1,param2);
       CREATE TEMPORARY TABLE master_temp AS (SELECT * FROM temp1) UNION ALL (SELECT *  FROM temp2) UNION ALL (SELECT * FROM temp3);
    COMMIT;
    END //
    DELIMITER ;
    

    最後に、マスタープロシージャから他の結果を取得したい場合は、次のように実行できます。

    DELIMITER //
    CREATE PROCEDURE another_pro(IN param1 data_type,IN param2 data_type);
    BEGIN
       CALL master_pro(param1,param2);
       SELECT columns_from_master_temp FROM master_temp WHERE where_clause;
    COMMIT;
    END //
    DELIMITER ;
    



    1. Rails + OSX上のMySQL:ライブラリがロードされていません:libmysqlclient.18.dylib

    2. ファイルから変数への読み取り-Bashスクリプトtake2

    3. PostgreSQL:シリアルvsアイデンティティ

    4. 統計の自動更新を表示する別の方法