Oracle
 sql >> Base de données >  >> RDS >> Oracle

PL/SQL :convertir le curseur explicite en curseur de référence ?

Comme mentionné dans mon commentaire, l'ouverture d'un sys_refcursor pour un autre curseur n'est pas autorisée avant Oracle 11g. Comme vous essayez de faire quelque chose qui nécessite l'utilisation de sys_refcursor, une façon pourrait être comme ci-dessous :

Créer un type

CREATE TYPE va IS TABLE OF NUMBER;
/

Bloquer :

DECLARE
   CURSOR c
   IS
      SELECT employee_id FROM employee;

   rc    SYS_REFCURSOR;
   var   va;
BEGIN
   OPEN c;

   FETCH c BULK COLLECT INTO var;

   CLOSE c;

   OPEN rc FOR SELECT COLUMN_VALUE FROM TABLE (var);
END;
/

Vous verriez ici qu'à la fin j'utilise à nouveau un SELECT instruction pour ref_cursor . C'est comme si vous ne vouliez pas utiliser la méthode habituelle, j'ai utilisé une méthode alternative.