Můžete napsat funkci PL/SQL, která vrátí tento kurzor (nebo můžete tuto funkci vložit do balíčku, pokud s tím souvisí více kódu):
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;
Tím vrátíte kurzor.
Ujistěte se, že jste nezadali SELECT
-Pokud je to možné, uveďte řetězec do uvozovek v PL/SQL. Vložení do řetězců znamená, že jej nelze zkontrolovat v době kompilace a že je nutné jej analyzovat, kdykoli jej použijete.
Pokud opravdu potřebujete použít dynamické SQL, můžete dotaz vložit do jednoduchých uvozovek:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Tento řetězec je nutné analyzovat při každém volání funkce, což bude obvykle pomalejší a skryje chyby ve vašem dotazu až do spuštění.
Ujistěte se, že tam, kde je to možné, používáte proměnné vazby, abyste se vyhnuli tvrdým analýzám:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;