Du kan skrive en PL/SQL-funktion for at returnere den markør (eller du kan placere den funktion i en pakke, hvis du har mere kode relateret til dette):
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;
Dette vil returnere markøren.
Sørg for ikke at indtaste din SELECT
- Indsæt anførselstegn i PL/SQL, når det er muligt. At sætte det i strenge betyder, at det ikke kan kontrolleres på kompileringstidspunktet, og at det skal parses, når du bruger det.
Hvis du virkelig har brug for at bruge dynamisk SQL, kan du sætte din forespørgsel i enkelte anførselstegn:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Denne streng skal parses, hver gang funktionen kaldes, hvilket normalt vil være langsommere og skjuler fejl i din forespørgsel indtil runtime.
Sørg for at bruge bind-variabler, hvor det er muligt for at undgå hårde parses:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;