Cái này:
dbms_output.put_line(sql_str);
... là những gì đang in đầu ra, đó là hành vi chính xác. Phần DECLARE cho tôi ấn tượng rằng bạn đang cố gắng chạy một chức năng ẩn danh, đúng không?
Tôi chưa bao giờ sử dụng EXECUTE NGAY LẬP TỨC - chỉ những thứ sau:
FUNCTION MY_FUNCTION()
RETURN SYS_REFCURSOR
L_CURSOR SYS_REFCURSOR;
L_QUERY VARCHAR2(5000) DEFAULT 'SELECT ...';
BEGIN
OPEN L_CURSOR FOR L_QUERY;
RETURN L_CURSOR;
END;
Nếu bạn muốn bao gồm các biến liên kết trong SQL động:
FUNCTION MY_FUNCTION()
RETURN SYS_REFCURSOR
L_CURSOR SYS_REFCURSOR;
L_QUERY VARCHAR2(5000) DEFAULT 'SELECT ...';
BEGIN
OPEN L_CURSOR FOR L_QUERY
USING bind_var1;
RETURN L_CURSOR;
END;