Мне нужно хранить некоторые запросы в БД (внутри функций в пакетах), а затем вызывать функции из SQL Developer (из ORDS), поэтому я обнаружил, что вы можете возвращать запросы в SYS_REFCURSOR из сохраненных функций следующим образом:
CREATE OR REPLACE FUNCTION test RETURN SYS_REFCURSOR AS
vRC SYS_REFCURSOR;
BEGIN
OPEN vRC FOR SELECT *
FROM employees
WHERE empid = 34650;
RETURN vRC;
END;
А позже просто извлеките данные в SQL Developer следующим образом:
SELECT test
FROM dual;
Итак, мой вопрос...
Это правильно? Я знаю, что каждый раз, когда мы ОТКРЫВАЕМ курсор, нам нужно явно ЗАКРЫТЬ его, и каждый пример этого, который у меня есть, закрывает refcursor в PL/SQL, и мне нужно получить данные из оператора SELECT (чтобы проанализировать его в JSON в РАЗРАБОТЧИК SQL).
Также я обнаружил, что в SQLPlus оператор «print» закрывает курсор после того, как он извлекает все данные, делает ли это также оператор SELECT в моем примере?