Je commence à essayer de me familiariser avec les procédures stockées dans MySQL.Retour d'un jeu de résultats à partir d'une procédure stockée
Je me demande s'il est possible de construire un jeu de résultats étape par étape - ou suis-je obligé d'utiliser une table temporaire?
Mon premier coup
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 ;
Cela conduit à 4 ensembles de résultats contenant chacun une ligne. Ce que je veux, c'est un ensemble de résultats contenant 4 lignes.
J'ajouté
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;
aux endroits appropriés (--1, --2 - avec le remplacement de la commande SELECT et --3), et cela a fonctionné.
Ma question maintenant: Y a-t-il un autre moyen de le faire? Peut-être déclarer la forme de mon ensemble de résultats une fois, puis "céder" ligne par ligne, sans avoir besoin de la table temporaire (et son allocation de stockage temporaire)?
Thx 4 ya réponse. Ce serait faisable dans cet exemple, mais pas dans le cas général. (dans lequel on pourrait, cependant, penser à d'autres possibilités). Mais il semble vraiment pas d'autre moyen de le faire ... – glglgl