ODP.NETにおいてバインド変数でテーブル名をパラメータとして指定できるか?

C#, ITODP.NET

//SQL文:テーブル名をバインド変数に
var str = "select * from :tablename";
//oracleコマンドにSQL渡してインスタンス生成
var cmd = new OracleCommand(str);
//パラメーターをバインド
cmd.Parameters.Add(":tablename", "HOGE_TABLE");

上記のようにテーブル名をバインド変数にして、
後からパラメータをバインドしようと考えました。


結論

色々と試行&調査した結果、
テーブル名をパラメータで指定することは不可能という結論に達しました。
テーブル名が不明だと、
問い合わせに対する実行計画を立てられないためNGだそうです。
SQLServerなどもoracleと同様、パラメータでテーブル名を置き換えできません。


でも条件によってテーブル名を動的に切り替えたい

パラメータを使わず文字列連結でSQLを作るしかないようです。

//テーブル名1
var tableName = "HOGE_TABLE";
//条件によってはテーブル名2を使用
if (条件) tableName = "FUGA_TABLE";
//SQL
var str = "select * from "+ tableName;

C#, ITODP.NET

Posted by raishin