Du kan skriva en PL/SQL-funktion för att returnera den markören (eller så kan du lägga den funktionen i ett paket om du har mer kod relaterad till detta):
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;
Detta kommer att returnera markören.
Se till att inte sätta din SELECT
- Sträng in citattecken i PL/SQL när det är möjligt. Att lägga det i strängar innebär att det inte kan kontrolleras vid kompilering och att det måste tolkas när du använder det.
Om du verkligen behöver använda dynamisk SQL kan du sätta din fråga inom enkla citattecken:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Den här strängen måste analyseras när funktionen anropas, vilket vanligtvis är långsammare och döljer fel i din fråga fram till körningen.
Se till att använda bind-variabler där det är möjligt för att undvika hårda analyser:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;