Oracle
 sql >> Base de données >  >> RDS >> Oracle

bloc plsql pour obtenir le résultat de la requête sql dynamique

Ceci :

dbms_output.put_line(sql_str);

... est ce qui imprime la sortie, ce qui est un comportement correct. La partie DECLARE me donne l'impression que vous essayez d'exécuter une fonction anonyme, n'est-ce pas ?

Je n'ai jamais utilisé EXECUTE IMMEDIATELY - seulement ce qui suit :

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;

Si vous souhaitez inclure des variables de liaison dans le SQL dynamique :

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;