Sie können eine PL/SQL-Funktion schreiben, um diesen Cursor zurückzugeben (oder Sie könnten diese Funktion in ein Paket packen, wenn Sie mehr diesbezüglichen Code haben):
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;
Dies gibt den Cursor zurück.
Stellen Sie sicher, dass Sie nicht Ihren SELECT
eingeben -String in PL/SQL wenn möglich in Anführungszeichen setzen. Es in Strings zu stecken bedeutet, dass es nicht zur Kompilierzeit überprüft werden kann und dass es geparst werden muss, wann immer Sie es verwenden.
Wenn Sie wirklich dynamisches SQL verwenden müssen, können Sie Ihre Abfrage in einfache Anführungszeichen setzen:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Diese Zeichenfolge muss bei jedem Aufruf der Funktion analysiert werden, was normalerweise langsamer ist und Fehler in Ihrer Abfrage bis zur Laufzeit verbirgt.
Stellen Sie sicher, dass Sie nach Möglichkeit Bind-Variablen verwenden, um harte Parsings zu vermeiden:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;