Możesz napisać funkcję PL/SQL, która zwróci ten kursor (lub możesz umieścić tę funkcję w pakiecie, jeśli masz więcej związanego z tym kodu):
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;
Spowoduje to zwrócenie kursora.
Upewnij się, że nie umieszczasz swojego SELECT
-String w cudzysłowie w PL/SQL, jeśli to możliwe. Umieszczenie go w łańcuchach oznacza, że nie można go sprawdzić w czasie kompilacji i musi być analizowany za każdym razem, gdy go używasz.
Jeśli naprawdę potrzebujesz użyć dynamicznego SQL, możesz umieścić swoje zapytanie w pojedynczych cudzysłowach:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Ten ciąg musi być analizowany za każdym razem, gdy funkcja jest wywoływana, co zwykle jest wolniejsze i ukrywa błędy w zapytaniu do czasu uruchomienia.
Upewnij się, że używasz zmiennych wiążących tam, gdzie to możliwe, aby uniknąć trudnych analiz:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;