sql >> Base de Datos >  >> RDS >> Oracle

Consulta dinámica PLSQL

El SQL dinámico no puede ver su variable PL/SQL:debe pasarle una cadena que se pueda ejecutar en el ámbito del motor SQL. Por lo tanto, debe concatenar el nombre de la tabla con el texto repetitivo de la instrucción:

query1 := 'SELECT max(c)  FROM ' || variable_name;

También debe devolver el resultado de la consulta en una variable.

Así es como funciona (he quitado parte del código innecesario de tu ejemplo):

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;