Comment créer curseur à l'intérieur de la procédure de corps en plsql
Je veux créer curseur à l'intérieur de la procédure de corps dynamiquement aussi j'ai utiliser pour la boucle au lieu de code ci-dessous. j'ai fait le curseur dynamique, mais je ne peux pas utiliser la boucle for.
PROCEDURE myprocedure
AS
LV_TEST_CUR SYS_REFCURSOR;
LV_QUERY VARCHAR2(200);
LV_DATE DATE;
BEGIN
LV_QUERY:='select sysdate as mydate from dual';
OPEN LV_TEST_CUR FOR LV_QUERY;
/*FOR CUR_VAR IN LV_TEST_CUR
LOOP
dbms_output.put_line(CUR_VAR.mydate);
end LOOP;
*/
LOOP
FETCH LV_TEST_CUR INTO LV_DATE;
EXIT
WHEN LV_TEST_CUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(LV_DATE);
END LOOP;
CLOSE LV_TEST_CUR;
END myprocedure;
si je suis à l'aide d'un code commenté(pour la boucle), j'obtiens l'erreur
PLS-00221: n'est pas une procédure ou n'est pas défini.
Est-il possible à l'aide de la boucle dans la dynamique du curseur?
OriginalL'auteur satheesh | 2012-08-28
Vous devez vous connecter pour publier un commentaire.
vous ne pouvez pas référence à une variable de curseur un curseur POUR la boucle
mais vous pouvez utiliser la commande select direct:
Que faire si j'ai besoin de créer de multiples curseur à l'intérieur de la boucle?
OriginalL'auteur schurik
Vous ne pouvez pas utiliser la
FOR <row> IN <cursor> LOOP
syntaxe SQL dynamique; voir l'exemple de la documentation, ce qui montre la méthode que vous utilisez lorsque ce code est commenté de toute façon.Votre exemple n'a pas besoin d'être dynamique, mais je suppose que vous avez juste simplifié pour cette question. Si elle avait un espace réservé alors il n'y aurait nulle part pour régler sa valeur. Si vous avez eu:
... puis le
FOR ... IN ...
version ne vous donne pas n'importe où pour affecter une valeur à ladays
espace réservé. Vous devez utiliser la dynamiqueOPEN
à faire:Bien sûr, vous ne pouvez pas besoin d'un espace réservé, et sont juste la construction de la chaîne de requête dynamiquement, mais la restriction s'applique toujours.
OriginalL'auteur Alex Poole
Autant que je suis conscient que vous ne pouvez pas utiliser une boucle avec une variable de curseur ou "curseur ref". POUR les boucles sont à utiliser uniquement avec codée en dur SQL ou des curseurs.
Voir la section sur la variable de curseur restrictions ici où il est dit explicitement "...vous ne pouvez pas référence à une variable de curseur un curseur POUR la boucle".
OriginalL'auteur Bob Jarvis