Detta:
dbms_output.put_line(sql_str);
...är det som skriver ut resultatet, vilket är korrekt beteende. DECLARE-delen ger mig intrycket av att du försöker köra en anonym funktion, eller hur?
Jag har aldrig använt EXECUTE IMMEDIATELY - bara följande:
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;
Om du vill inkludera bindningsvariabler i dynamisk 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;