Можете да напишете PL/SQL функция, за да върне този курсор (или можете да поставите тази функция в пакет, ако имате повече код, свързан с това):
CREATE OR REPLACE FUNCTION get_allitems
RETURN SYS_REFCURSOR
AS
my_cursor SYS_REFCURSOR;
BEGIN
OPEN my_cursor FOR SELECT * FROM allitems;
RETURN my_cursor;
END get_allitems;
Това ще върне курсора.
Уверете се, че не поставяте своя SELECT
- Низ в кавички в PL/SQL, когато е възможно. Поставянето му в низове означава, че не може да се проверява по време на компилиране и че трябва да се анализира всеки път, когато го използвате.
Ако наистина трябва да използвате динамичен SQL, можете да поставите заявката си в единични кавички:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Този низ трябва да се анализира при всяко извикване на функцията, което обикновено е по-бавно и скрива грешките във вашата заявка до времето за изпълнение.
Уверете се, че използвате свързващи променливи, където е възможно, за да избегнете трудни анализи:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;