1
我開始嘗試熟悉MySQL中的存儲過程。從存儲過程返回一個結果集
我想知道是否可以逐步構建結果集 - 或者我需要使用臨時表嗎?
我的第一個鏡頭是
CREATE TEMPORARY TABLE t1 (id int);
INSERT INTO t1 VALUES (1), (2), (3), (4);
CREATE TEMPORARY TABLE t2 (id1 int, id2 int);
INSERT INTO t2 VALUES (5,4),(3,2),(1,0),(12,34);
DROP PROCEDURE IF EXISTS curdemo;
delimiter //
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a INT;
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id FROM t1 LIMIT 1000;
DECLARE cur2 CURSOR FOR SELECT id1, id2 FROM t2 LIMIT 1000;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
OPEN cur2;
-- 1
REPEAT
FETCH cur1 INTO a;
FETCH cur2 INTO b, c;
IF NOT done THEN
SELECT a, b, c;
-- 2
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2;
-- 3
END
//
DELIMITER ;
這導致4結果組,每個組包含一行。我想要的是一個包含4行的結果集。
所以我添加
DROP TEMPORARY TABLE IF EXISTS tt;
CREATE TEMPORARY TABLE tt (id1 int, id2 int, id3 int);
INSERT INTO tt VALUES (a, b, c);
SELECT * FROM tt;
DROP TEMPORARY TABLE tt;
在適當的地方(l-1,l-2 - 與更換SELECT和--3),和它的工作。
我現在的問題:是否有另一種方法呢?也許可以聲明一次結果集的形式,然後逐行「yield」,而不需要臨時表(及其臨時存儲分配)?
THX 4雅答案。在這個例子中這是可行的,但不是在一般情況下。 (然而,人們可以考慮其他的可能性)。但似乎沒有其他辦法可以做到這一點...... – glglgl