Dette:
dbms_output.put_line(sql_str);
... er det, der udskriver output, hvilket er korrekt adfærd. DECLARE-delen giver mig det indtryk, at du forsøger at køre en anonym funktion, ikke sandt?
Jeg har aldrig brugt EXECUTE IMMEDIATELY - kun følgende:
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;
Hvis du vil inkludere bindevariabler i den dynamiske 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;