Приводимые ниже примеры в каждой из трех сред программирования будут использовать для доступа к БД через ссылку на курсор один и тот же пакет. В реальной жизни именно на подобный пакет и ляжет описание требуемой программной логики. Тут же он воимя наглядности устроен максимально просто, (почти) безо всякой программно-прикладной логики, но это обстоятельство и обеспечивает ему универсальность.
Выдадим в SQL*Plus: CONNECT scott/tiger
CREATE OR REPLACE PACKAGE generic_ref_cursor AS PROCEDURE get_ref_cursor(sqlselect IN VARCHAR2, rc OUT sys_refcursor); END; /
CREATE OR REPLACE PACKAGE BODY generic_ref_cursor AS PROCEDURE get_ref_cursor(sqlselect IN VARCHAR2, rc OUT sys_refcursor) AS BEGIN OPEN rc FOR sqlselect; END; END; /
В реальной практике такому выхолощенному пакету вполне может найтись свое место, однако часто будут использоваться и другие, общие с приведенным выше только тем, что
(а) в теле будет обязательно присутствовать предложение OPEN
(б) среди параметров должен присутствовать выходной типа ссылки на курсор (возможно строгой).
Остальное регламентируется исключительно логикой приложения и организации программы.