Như tôi nghĩ rằng tính năng ở trên không được triển khai trong MySQL. Xem tại đây để biết thêm thông tin.
Tôi đã đưa ra giải pháp sau đây. Nhưng không chắc đó là cách tiếp cận tốt nhất cho vấn đề này.
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 ;
như trên, bạn có thể tạo hai thủ tục tiếp theo như sau.
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 ;
Vì vậy, sau đây là thủ tục chính là sự kết hợp của 3 thủ tục trên.
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 ;
VẬY cuối cùng nếu bạn muốn nhận được bất kỳ kết quả nào khác từ quy trình chính, bạn có thể thực hiện như sau.
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 ;