Oracle
 sql >> Database >  >> RDS >> Oracle

plsql per ottenere il risultato della query sql dinamica

Questo:

dbms_output.put_line(sql_str);

...è ciò che sta stampando l'output, che è un comportamento corretto. La parte DECLARE mi dà l'impressione che tu stia tentando di eseguire una funzione anonima, giusto?

Non ho mai usato ESEGUI IMMEDIATAMENTE - solo quanto segue:

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;

Se vuoi includere le variabili bind nell'SQL dinamico:

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;