需從 orders 取前 2 筆客戶 ID、從 region 取前 2 筆區域描述,交錯合併至臨時表輸出。類似報表需「橫向拼接」兩張無關聯表的部分資料。
DELIMITER $$
CREATE PROCEDURE `MergeTwoTablesDemo`()
BEGIN
DECLARE v_col1 VARCHAR(20);
DECLARE v_col2 VARCHAR(20);
DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT customer_id FROM orders LIMIT 2;
DECLARE cur2 CURSOR FOR SELECT region_description FROM region LIMIT 2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- 建立臨時表
DROP TEMPORARY TABLE IF EXISTS tmp_merged;
CREATE TEMPORARY TABLE tmp_merged (
id INT AUTO_INCREMENT PRIMARY KEY,
col1 VARCHAR(20),
col2 VARCHAR(20)
) ENGINE=Memory;
OPEN cur1;
OPEN cur2;
fetch_loop: LOOP
FETCH cur1 INTO v_col1;
FETCH cur2 INTO v_col2;
IF done THEN
LEAVE fetch_loop;
END IF;
INSERT INTO tmp_merged (col1, col2) VALUES (v_col1, v_col2);
END LOOP;
CLOSE cur1;
CLOSE cur2;
SELECT * FROM tmp_merged;
DROP TEMPORARY TABLE tmp_merged;
END$$
DELIMITER ;
done=1,避免無限迴圈。若兩表有關聯鍵或可生成行號,優先用 JOIN 或 UNION ALL + 窗口函數: