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

Mysql laver en lagret procedure fra flere lagrede procedurer

Som jeg tror, ​​er ovenstående funktion ikke implementeret i MySQL. Se her for mere information.

Jeg kom frem til følgende løsning. Men det er ikke sikkert, det er den bedste tilgang til dette problem.

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 ;

som ovenfor kan du oprette de næste to procedurer som følger.

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 ;

Så følgende er hovedproceduren, som er forening af ovenstående 3 procedurer.

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 ;

SÅ endelig, hvis du ønsker at få andre resultater fra master procedure, kan du gøre som følger.

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. Hvordan vælger jeg en MySQL-database til brug med PDO i PHP?

  2. Sådan sammenlignes to rækker fra samme tabel

  3. MySQL - sum kolonneværdi(er) baseret på række fra samme tabel

  4. EXEC sp_executesql med flere parametre