यह:
dbms_output.put_line(sql_str);
आउटपुट प्रिंट कर रहा है, जो सही व्यवहार है। DECLARE भाग मुझे यह आभास देता है कि आप एक अनाम फ़ंक्शन चलाने का प्रयास कर रहे हैं, सही?
मैंने कभी भी तत्काल निष्पादन का उपयोग नहीं किया - केवल निम्नलिखित:
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;
यदि आप डायनेमिक SQL में बाइंड वैरिएबल शामिल करना चाहते हैं:
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;