En 11g pour afficher le résultat d’un curseur le pl/sql devait renvoyer le curseur dans une variable:
variable r refcursor exec open :r for select * from dba_users where user_id <10; print r
En 12c avec dbms_sql.return_result() on peut le faire afficher à sqlplus un peu à la manière de dbms_output
declare c sys_refcursor; begin open c for select * from dba_users where user_id <10; dbms_sql.return_result(c); end; /
La demo est plus parlante.
Cette fonctionnalité a été introduite pour pouvoir retourner un ResultSet avec Statement.getResultSet() par exemple en Java, même pour un statement qui serait un appel à une procédure stockée. Afin le code client soit compatible avec le fonctionnement d’autres SGBD, et donc possibilité de changer de SGBD en ne modifiant que le code des procédures stockées (et ni leur signature, ni le code client).