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

2022年4月7日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;

2022年4月7日C#,ITODP.NET

Posted by raishin