Curseur dynamique dans la procédure stockée
Je voudrais LIMITE d'utilisation dans un curseur. Le curseur doit être utilisé et mis à jour plusieurs fois au sein d'une boucle, à chaque fois avec des paramètres différents de la LIMITE. Voici un peu de code:
DELIMITER $$
CREATE PROCEDURE `updateIt`() READS SQL DATA
BEGIN
declare done int(1) default 0;
declare counter int(10) default 0;
declare xabc int(10) default 0;
declare tab1Cursor cursor for select abc from tab1 limit 100000*counter, 100000;
declare continue handler for not found set done=1;
loopCounter: LOOP
set done = 0;
open tab1Cursor;
igmLoop: loop
fetch tab1Cursor into xabc;
if done = 1 then leave igmLoop; end if;
-- do something
end loop igmLoop;
close tab1Cursor;
if (counter = 1039)
leave loopCounter;
end if;
set counter = counter + 1;
END LOOP loopCounter;
END $$
DELIMITER ;
Ceci, cependant, ne fonctionne pas (j'ai aussi essayé avec le curseur dans la BOUCLE counterLoop). Pouvez Mysql traiter avec les curseurs dynamiques?
source d'informationauteur Marcus
Vous devez vous connecter pour publier un commentaire.
De la Manuel MySQL
Cependant, il existe 2 façons.
La première est pour les cas où absolument un seul utilisateur à la fois l'exécution de la procédure. Préparer un énoncé peut être utilisé pour créer une vue avec le SQL dynamique et le curseur permet de sélectionner à partir de ce statiquement vue nommée. Il n'y a presque aucun impact sur les performances. Malheureusement, ces points de vue sont également visibles par les autres utilisateurs (il n'y a pas une telle chose comme une situation temporaire), donc cela ne fonctionne pas pour plusieurs utilisateurs.
De la même façon, une table temporaire peut être créé dans la préparer la déclaration et le curseur permet de sélectionner à partir de la table temporaire. Seule la session en cours peut voir une table temporaire, de sorte que l'utilisateur plusieurs problème est résolu. Mais cette solution peut avoir un impact significatif sur les performances depuis une table temporaire est créé à chaque fois que le proc tourne.
Ligne de fond: Nous avons encore besoin des curseurs pour être en mesure d'être créé dynamiquement!
Voici un exemple de l'aide d'une vue de passer le nom de la table et le nom de colonne dans un curseur à partir de la mysql forums