Você pode escrever uma função PL/SQL para retornar esse cursor (ou pode colocar essa função em um pacote se tiver mais código relacionado a isso):
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;
Isso retornará o cursor.
Certifique-se de não colocar seu
SELECT
-Coloque entre aspas em PL/SQL quando possível. Colocá-lo em strings significa que ele não pode ser verificado em tempo de compilação e que deve ser analisado sempre que você o usar. Se você realmente precisa usar SQL dinâmico, pode colocar sua consulta entre aspas simples:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Essa string deve ser analisada sempre que a função for chamada, o que geralmente será mais lento e ocultará erros em sua consulta até o tempo de execução.
Certifique-se de usar variáveis de ligação sempre que possível para evitar análises difíceis:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;