Je soupçonne que vous pensez que votre curseur devrait récupérer les lignes du REFCURSOR. Ce n'est pas. Le REFCURSOR est lui-même un curseur, vous n'utilisez pas un autre curseur pour le sélectionner.
Votre curseur actuel récupère une seule ligne, avec une seule colonne, contenant le résultat de l'appel de fonction. Qui est un record_cursor
pas un record_name
, vous obtenez donc une incompatibilité de type.
Je soupçonne que ce que vous voulez vraiment faire, c'est quelque chose comme ça :
declare
symbol_cursor package_name.record_cursor;
symbol_record package_name.record_name;
begin
symbol_cursor := package_name.function_name('argument');
loop
fetch symbol_cursor into symbol_record;
exit when symbol_cursor%notfound;
-- Do something with each record here, e.g.:
dbms_output.put_line( symbol_record.field_a );
end loop;
CLOSE symbol_cursor;
end;