Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

bloco plsql para obter o resultado da consulta sql dinâmica


Este:
dbms_output.put_line(sql_str);

...é o que está imprimindo a saída, que é o comportamento correto. A parte DECLARE me dá a impressão de que você está tentando executar uma função anônima, correto?

Eu nunca usei EXECUTE IMEDIATAMENTE - apenas o seguinte:
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 você quiser incluir variáveis ​​de ligação no SQL dinâmico:
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;