Je kunt een PL/SQL-functie schrijven om die cursor te retourneren (of je zou die functie in een pakket kunnen plaatsen als je meer code hebt die hiermee verband houdt):
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;
Dit zal de cursor terugbrengen.
Zorg ervoor dat u uw SELECT
- Zet waar mogelijk tussen aanhalingstekens in PL/SQL. Door het in strings te plaatsen, kan het niet worden gecontroleerd tijdens het compileren en moet het worden geparseerd wanneer u het gebruikt.
Als u echt dynamische SQL moet gebruiken, kunt u uw zoekopdracht tussen enkele aanhalingstekens plaatsen:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Deze tekenreeks moet worden geparseerd wanneer de functie wordt aangeroepen, wat meestal langzamer is en fouten in uw zoekopdracht tot runtime verbergt.
Zorg ervoor dat u waar mogelijk bindvariabelen gebruikt om harde parsen te vermijden:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;