Quelque chose comme ça devrait faire l'affaire (Cependant, lisez après l'extrait pour plus d'informations)
CREATE PROCEDURE GetFilteredData()
BEGIN
DECLARE bDone INT;
DECLARE var1 CHAR(16); -- or approriate type
DECLARE Var2 INT;
DECLARE Var3 VARCHAR(50);
DECLARE curs CURSOR FOR SELECT something FROM somewhere WHERE some stuff;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;
DROP TEMPORARY TABLE IF EXISTS tblResults;
CREATE TEMPORARY TABLE IF NOT EXISTS tblResults (
--Fld1 type,
--Fld2 type,
--...
);
OPEN curs;
SET bDone = 0;
REPEAT
FETCH curs INTO var1,, b;
IF whatever_filtering_desired
-- here for whatever_transformation_may_be_desired
INSERT INTO tblResults VALUES (var1, var2, var3 ...);
END IF;
UNTIL bDone END REPEAT;
CLOSE curs;
SELECT * FROM tblResults;
END
Quelques éléments à prendre en compte...
Concernant l'extrait ci-dessus :
- peut vouloir transmettre une partie de la requête à la procédure stockée, peut-être en particulier les critères de recherche, pour la rendre plus générique.
- Si cette méthode doit être appelée par plusieurs sessions, etc., vous voudrez peut-être transmettre un ID de session de sorte à créer un nom de table temporaire unique (préoccupation réellement inutile puisque différentes sessions ne partagent pas le même espace de noms de fichiers temporaires ; voir le commentaire de Gruber, ci-dessous)
- Quelques parties telles que les déclarations de variables, la requête SELECT, etc. doivent être correctement spécifiées
Plus généralement :essayer d'éviter d'avoir besoin d'un curseur .
J'ai délibérément nommé la variable de curseur curs[e], car les curseurs sont une bénédiction mitigée. Ils peuvent nous aider à implémenter des règles métier compliquées qui peuvent être difficiles à exprimer sous la forme déclarative de SQL, mais cela nous amène ensuite à utiliser la forme procédurale (impérative) de SQL, qui est une caractéristique générale de SQL qui n'est ni très conviviale/ expressif, en termes de programmation et souvent moins efficace en termes de performances.
Vous pouvez peut-être envisager d'exprimer la transformation et le filtrage souhaités dans le contexte d'une requête SQL "simple" (déclarative).