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

Requête dynamique PLSQL

Dynamic SQL ne peut pas voir votre variable PL/SQL :vous devez lui transmettre une chaîne qui peut être exécutée dans le cadre du moteur SQL. Vous devez donc concaténer le nom de la table avec le texte passe-partout de l'instruction :

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

Vous devez également retourner le résultat de la requête dans une variable.

Voici comment cela fonctionne (j'ai supprimé une partie du code inutile de votre exemple) :

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;