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

consulta dinâmica PLSQL


SQL dinâmico não pode ver sua variável PL/SQL:você precisa passar uma string que pode ser executada no escopo do mecanismo SQL. Portanto, você precisa concatenar o nome da tabela com o texto clichê da instrução:
query1 := 'SELECT max(c)  FROM ' || variable_name;

Você também precisa retornar o resultado da consulta em uma variável.

Aqui está como funciona (removi parte do código desnecessário do seu exemplo):
DECLARE    
 c_table VARCHAR2(40);
 c_obj VARCHAR2(20);
BEGIN
   for lrec in ( select a as tab_name from A )
   LOOP
      EXECUTE IMMEDIATE 'SELECT max(object_ref)  FROM ' || lrec.tab_name 
           into c_obj ;
      dbms_output.put_line('Maximum value: '|| lrec.tab_name
           || '='|| c_obj);
   END LOOP;
END;