Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Dynamische PLSQL-Abfrage

Dynamisches SQL kann Ihre PL/SQL-Variable nicht sehen:Sie müssen ihr eine Zeichenfolge übergeben, die im Bereich der SQL-Engine ausgeführt werden kann. Sie müssen also den Tabellennamen mit dem Boilerplate-Text der Anweisung verketten:

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

Außerdem müssen Sie das Ergebnis der Abfrage in eine Variable zurückgeben.

So funktioniert es (ich habe einen Teil des unnötigen Codes aus Ihrem Beispiel entfernt):

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;