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

Tabellen- und Spaltennamen dynamisch über Bind-Variablen übergeben

Tabellen- und Spaltennamen können nicht als Bind-Variablen übergeben werden, nein. Der springende Punkt bei Bind-Variablen ist, dass Oracle einen Abfrageplan einmal für die Anweisung generieren und ihn dann viele Male mit unterschiedlichen Bind-Variablenwerten ausführen kann. Wenn der Optimierer nicht weiß, auf welche Tabelle zugegriffen wird oder welche Spalten ausgewählt und gefiltert werden, kann er keinen Abfrageplan generieren.

Wenn sich Ihre Bedenken auf SQL-Injection-Angriffe beziehen und davon ausgegangen wird, dass dynamisches SQL tatsächlich erforderlich ist (meistens impliziert die Notwendigkeit, auf dynamisches SQL zurückzugreifen, Probleme mit dem Datenmodell), können Sie DBMS_ASSERT verwenden Paket, um zu validieren, dass die Tabellen- und Spaltennamen kein eingebettetes SQL enthalten.