Zum Beispiel ist dies in der Regel erlaubt:Welche Teile einer SQL-Abfrage dürfen parametrisiert werden?
sql.execute("select * from some_table where [email protected]", parameter=5);
Aber nicht dies:
sql.execute("select * from @which_table where some_column=5", which_table="some_table");
alle möglichen Kombinationen nicht getestet Nachdem .... Ist dies:
sql.execute("select @which_column from some_table", which_column="some_column");
Oder diese :
sql.execute("select some_column*@multiplier from some_table", multipler=5);
Oder ....
Was ist die allgemeine Regel für die Bestimmung, ob ein Teil einer Abfrage parametrisierbar ist, und warum?
(Ich weiß, dass diese unterschiedliche Antworten in Bezug auf verschiedene DB-Motoren und Adapter für verschiedene Sprachen haben kann, aber ich habe bemerkt, dass es allgemeine Trends)
Kurz gesagt hilft, können Sie einen Wert parametrieren aber man kann nicht ein Objekt wie eine Tabelle, eine Spalte oder eine Datenbank parametrieren. Wenn Sie dynamische Spalten und Tabellen benötigen, weist dies im Allgemeinen auf einen schlechten Datenbankentwurf hin (jedoch nicht immer). Sie müssen etwas Code schreiben, um in diesen Fällen Ihr SQL dynamisch zu generieren. – JNevill
Oracle: https://oracle-base.com/articles/misc/literals-substitution-variables-and-bind-variables – xQbert
Kurz gesagt: alles, was den Abfrageplan ** ändert ** nicht, wenn die Parameter geändert werden. Also: Schema/Tabelle/Spaltennamen, Operatoren, (Aggregat) Funktionsnamen können nicht parametrisiert werden (und würde dynamische SQL benötigen) Vielleicht habe ich ein paar vergessen ... – wildplasser