Utilisation d'un curseur en PL/ SQL

Résolu
safowan Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   -  
safowan Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Lors de la révision j'ai trouvé un petit exemple qui utilise le curseur, mais je crois que sa correction contient une erreur qui m'a mené à ne pas bien comprendre l'exemple. Alors peux je avoir de l'aide en me corrigeant l'erreur ou bien me faire comprendre la correction ? et merci d'avance.

La table est :
PRODUIT (Num_Produit, Num_Fournisseur #, Libelle_Produit, Qte_Stock, Stock_Limite)

La question s'etait :
Créer une fonction F_STOCK_LIMITE qui permet de retourner la quantité en stock limite d’un produit dont le numéro est passé en argument. On utilisera obligatoirement un curseur explicite pour extraire la quantité en stock limite du produit.

et la correction s'etait :
CREATE OR REPLACE FUNCTION F_STOCK_LIMITE (A_NUM_PRODUIT IN PRODUIT.NUM_PRODUIT%TYPE)
RETURN NUMBER IS
CURSOR C_STOCK_LIMITE IS
SELECT STOCK_LIMITE FROM PRODUIT
WHERE NUM_PRODUIT=A_NUM_PRODUIT;
BEGIN
FOR V_ STOCK_LIMITE IN C_STOCK_LIMITE
RETURN V_STOCK_LIMITE.STOCK_LIMITE;
END LOOP;
END F_STOCK_LIMITE;

Ce qui me gène, c'est la nouvelle variable "V_stock_limite" (je l'ai mis en gras) qui est utilisée dans le programmme et qui n'est pas déclarée au début. Qu'est ce qu'elle représente ?

2 réponses

chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
Je ne savais pas qu'on pouvait faire des boucles sur les curseurs comme ca...mais c'est super efficace!!!
En fait, la variable V_STOCK_LIMITE est le curseur courant de ta boucle.
Par exemple ton curseur va renvoyer 3 lignes, V_STOCK_LIMITE est le curseur courant de ta boucle (premiere entrée dans la boucle, il va contenir la premiere ligne ensuite deuxieme entrée dans la boucle, il va contenir la deuxieme ligne etc.....jusqu'a plus de ligne trouvée).
Tu pourrais faire la meme chose avec un FETCH, mais ca te fait des lignes de code en plus......
C'est une declaration implicite pour les boucles.
@+
1
safowan Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   6
 
Merci Chuka de me répondre :)
Alors à ce que j'ai bien compris, V_STOCK_LIMITE est le curseur courant et chaque fois lorsqu'on retourne V_STOCK_LIMITE.STOCK_LIMITE c'est à dire qu'on retourne la limite du produit de chaque ligne du curseur.
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378 > safowan Messages postés 174 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,
Exactement!!! (en fait curseur courant je suis pas sur que ce soit une bonne denomination, comme je l'ai écrit avant, peut-etre curseur representant l'indice courant du curseur dans la boucle, ou "pointeur" de la ligne courante , serait plus approprié.... mais le principal c'est de comprendre la notion!! ;-))
merci à toi, car j'ai appris un truc plutot interessant pour les curseur ce soir!!!
@+
0
safowan Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   6
 
Tout est clair maintenant Chuka, je te remercie une autre fois :)
1