C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 168 を表示中)
■97213 / )  ACCESS FULL にならないSQLの書き方について
□投稿者/ ひろし (1回)-(2021/04/15(Thu) 21:32:22)

分類:[.NET 全般] 

ひろしと申します。

データベースはOracle 11.2.0.2.0 を使用しています。

ID CHAR(10) (PKEY)
NAME VARCHAR(20)

上記のようなテーブルがあったとします。

画面から ID の指定があった場合は、ID 条件を指定して、指定がない場合は全件取得という仕様があります。
(言語はVBです)

そこで、プログラム的には、IF文で分岐すると、SQLエディタのSQLをそのまま貼り付ける事が出来なくなってしまうため

select * from emp
where id > :id_From or :id_From is null

というSQLで分岐なしにしようと考えたのですが、実行計画を見てみると、プライマリーキーで検索しているのにもかかわらず
TABLE ACCESS FULL
になってしまいます。


VBのIf文で分岐することなく、インデックスが使われるSQLの書き方はあるでしょうか。


If分で分岐すると以下のようになると思います。
sb.AppendLine("select * from emp")
if Not String.IsNullOrEmpty(id_From) Then
sb.AppendLine("where id > :id_From")
End If


分岐なしにすると以下のようになり、エディタのSQLをそのまま貼り付けることが出来ます。
sb.AppendLine("select * from emp")
sb.AppendLine("where id > :id or :id is null")



よろしくお願いします。


※質問用にSQLをシンプルにしていますが、実際にはもっと複雑なSQLとなります。

返信 編集キー/


管理者用

- Child Tree -