Bạn có thể viết một hàm PL / SQL để trả về con trỏ đó (hoặc bạn có thể đặt hàm đó trong một gói nếu bạn có thêm mã liên quan đến điều này):
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;
Thao tác này sẽ trả về con trỏ.
Đảm bảo không đặt SELECT
của bạn -String thành dấu ngoặc kép trong PL / SQL khi có thể. Đặt nó trong chuỗi có nghĩa là nó không thể được kiểm tra tại thời điểm biên dịch và nó phải được phân tích cú pháp bất cứ khi nào bạn sử dụng nó.
Nếu bạn thực sự cần sử dụng SQL động, bạn có thể đặt truy vấn của mình trong dấu ngoặc kép:
OPEN my_cursor FOR 'SELECT * FROM allitems';
Chuỗi này phải được phân tích cú pháp bất cứ khi nào hàm được gọi, thường sẽ chậm hơn và ẩn các lỗi trong truy vấn của bạn cho đến thời gian chạy.
Đảm bảo sử dụng biến ràng buộc nếu có thể để tránh phân tích cú pháp cứng:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;