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

Kann eine Oracle-SQL-Abfrage eine aus einer Tabelle ausgewählte Zeichenfolgenabfrage ausführen?

Im Allgemeinen ist dies kein besonders gutes Design – das Speichern von SQL in Tabellen und dessen dynamische Ausführung führt zu allen möglichen Sicherheits- und Wartungsproblemen.

Es ist wahrscheinlich möglich (obwohl es viel zu spät an einem Freitag ist, der viel zu früh für mich begann, um es herauszufinden), eine wirklich coole XML-Abfrage nach dem Vorbild von diese Abfrage, die eine Zählung (*) für jede Tabelle im Schema ausführt das würde dies alles in einer Abfrage tun.

Für die überwiegende Mehrheit der Programmierer wäre es jedoch einfacher, die Abfragen zu durchlaufen, sie einzeln auszuführen und die Ergebnisse irgendwo zu speichern. Potenziell würde die lokale Variable zum Beispiel zu einer Sammlung von Zählwerten hinzugefügt werden.

FOR q IN (SELECT sql_text FROM query_table)
LOOP
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || q.sql_text || ')'
     INTO some_local_variable;
  <<do something with the local variable>>
END LOOP;

Da Sie versuchen, eine Ansicht zu erstellen, könnten Sie diese Logik in eine Pipeline-Tabellenfunktion einfügen. Sie würden eine PIPE ROW machen um Daten innerhalb der Schleife zurückzugeben. Ihre Ansicht könnte dann über der Pipeline-Tabellenfunktion erstellt werden.