sql >> Databáze >  >> RDS >> Mysql

Mysql vytvoří uloženou proceduru z více uložených procedur

Jak si myslím, výše uvedená funkce není implementována v MySQL. Viz zde pro více informací.

Napadlo mě následující řešení. Ale nejsem si jistý, zda je to nejlepší přístup k tomuto problému.

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 ;

jak je uvedeno výše, můžete vytvořit další dva postupy následovně.

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 ;

Následuje tedy hlavní postup, který je spojením výše uvedených 3 postupů.

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 ;

Takže nakonec, pokud chcete získat nějaké další výsledky z hlavního postupu, můžete to udělat následovně.

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. Dotaz MySQL pomocí pole

  2. Jak převést postgresovou databázi na sqlite

  3. Výpočet rozdílů hodnot mezi dvěma záznamy v Eloquent

  4. Jak vytvořit objekt JSON v MySql s booleovskou hodnotou?