Dit:
dbms_output.put_line(sql_str);
... is wat de uitvoer afdrukt, wat correct gedrag is. Het DECLARE-gedeelte geeft me de indruk dat u een anonieme functie probeert uit te voeren, correct?
Ik heb nog nooit EXECUTE ONMIDDELLIJK gebruikt - alleen het volgende:
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;
Als u bindvariabelen in de dynamische SQL wilt opnemen:
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;