sql >> データベース >  >> RDS >> Oracle

バインド変数を使用してテーブルと列の名前を動的に渡す

    テーブル名と列名をバインド変数として渡すことはできません。バインド変数の要点は、Oracleがステートメントに対してクエリプランを1回生成し、それをさまざまなバインド変数値で何度も実行できることです。オプティマイザは、アクセスされているテーブルや、選択およびフィルタリングされている列を認識していない場合、クエリプランを生成できません。

    懸念がSQLインジェクション攻撃に関連していて、動的SQLが実際に必要であると想定している場合(ほとんどの場合、動的SQLに頼る必要があるということは、データモデルに問題があることを意味します)、DBMS_ASSERTを使用できます。 テーブル名と列名に埋め込みSQLが含まれていないことを検証するパッケージ。



    1. MySQL、MySQLi、PDOの違いは何ですか?

    2. MySQLクエリのシングルクォート、ダブルクォート、およびバックティック

    3. SQLServerのselectステートメントでTOPを使用して変数を動的にせずに使用する

    4. PostgreSQLでデータベースへのアクセスを制限する方法