Puoi scrivere una funzione PL/SQL per restituire quel cursore (o potresti mettere quella funzione in un pacchetto se hai più codice relativo a questo):
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;
Questo restituirà il cursore.
Assicurati di non inserire il tuo SELECT
-Inserisci tra virgolette in PL/SQL quando possibile. Metterlo in stringhe significa che non può essere controllato in fase di compilazione e che deve essere analizzato ogni volta che lo usi.
Se hai davvero bisogno di usare SQL dinamico puoi mettere la tua query tra virgolette singole:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Questa stringa deve essere analizzata ogni volta che viene chiamata la funzione, che di solito è più lenta e nasconde gli errori nella query fino al runtime.
Assicurati di utilizzare le variabili di collegamento ove possibile per evitare analisi difficili:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;