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 -
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 ?
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 ?
A voir également:
- Utilisation d'un curseur en PL/ SQL
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Comment faire apparaître le curseur sans souris - Guide
- Votre pc ne peut pas utiliser un autre écran ✓ - Forum Montage et acquisition vidéo
- Curseur souris disparu pc portable asus - Forum Périphériques
2 réponses
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.
@+
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.
@+
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.
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!!!
@+