が、これは一般的に許可されている:SQLクエリのどの部分をパラメータ化することができますか?例えば
sql.execute("select * from some_table where [email protected]", parameter=5);
ではなく、この:
sql.execute("select * from @which_table where some_column=5", which_table="some_table");
は、すべての可能な組み合わせをテストしていないた....です:
sql.execute("select @which_column from some_table", which_column="some_column");
またはこの:
sql.execute("select some_column*@multiplier from some_table", multipler=5);
または...
クエリの一部がパラメータ化可能かどうかを判断する一般的なルールは何ですか?また、その理由は何ですか?
(私はこれは、異なる言語の異なるDBエンジンとアダプタに対して異なる答えを持っているかもしれないが、私は一般的な傾向があることに気づいたことを実現)
を助け
希望は、あなたが値をパラメータ化できますが、テーブル、列、またはデータベースのようなオブジェクトをパラメータ化することはできません。動的な列と表が必要な場合は、通常、悪いデータベース設計を指します(必ずしもそうではありません)。そのような場合には、SQLを動的に生成するためのコードを記述する必要があります。 – JNevill
Oracle:https://oracle-base.com/articles/misc/literals-substitution-variables-and-bind-variables – xQbert
要するに、パラメータが変更されたときにクエリプランを変更しない**すべて**です。だから:スキーマ/テーブル/列名、演算子、(集約)関数名はパラメータ化することはできません(そして、動的SQLが必要)おそらく私はいくつかを忘れた... – wildplasser