Dies:
dbms_output.put_line(sql_str);
... ist das, was die Ausgabe druckt, was ein korrektes Verhalten ist. Der DECLARE-Teil gibt mir den Eindruck, dass Sie versuchen, eine anonyme Funktion auszuführen, richtig?
Ich habe EXECUTE IMMEDIATELY nie verwendet - nur Folgendes:
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;
Wenn Sie Bind-Variablen in das dynamische SQL einbeziehen möchten:
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;