Anda dapat menulis fungsi PL/SQL untuk mengembalikan kursor itu (atau Anda dapat meletakkan fungsi itu dalam sebuah paket jika Anda memiliki lebih banyak kode yang terkait dengan ini):
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;
Ini akan mengembalikan kursor.
Pastikan untuk tidak memasukkan SELECT
-String menjadi tanda kutip dalam PL/SQL bila memungkinkan. Memasukkannya ke dalam string berarti tidak dapat diperiksa pada waktu kompilasi, dan harus diurai setiap kali Anda menggunakannya.
Jika Anda benar-benar perlu menggunakan SQL dinamis, Anda dapat menempatkan kueri Anda dalam tanda kutip tunggal:
OPEN my_cursor FOR 'SELECT * FROM allitems';
String ini harus diurai setiap kali fungsi dipanggil, yang biasanya akan lebih lambat dan menyembunyikan kesalahan dalam kueri Anda hingga waktu proses.
Pastikan untuk menggunakan variabel-bind jika memungkinkan untuk menghindari penguraian yang sulit:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;