sql >> Databasteknik >  >> RDS >> Mysql

Mysql gör en lagrad procedur från flera lagrade procedurer

Som jag tror att ovanstående funktion inte är implementerad i MySQL. Se här för mer information.

Jag kom på följande lösning. Men det är inte säkert att det är den bästa lösningen på detta 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 ovan kan du skapa nästa två procedurer enligt följande.

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öljande är huvudproceduren som är förening av ovanstå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Å äntligen om du vill få några andra resultat från masterprocedur kan du göra enligt följande.

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. FEL 2003 (HY000):Kan inte ansluta till MySQL-servern på '127.0.0.1' (111)

  2. SQL Server Transaktionslogg — Del 1

  3. Optimera dataanrop i JDBC till JTable

  4. MySQL-fråga för att dra objekt, men alltid visa en viss överst