Oracle
 sql >> Datenbank >  >> RDS >> Oracle

plsql-Block, um das Ergebnis der dynamischen SQL-Abfrage zu erhalten

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;