2

カーソルから動的に値を取得する単純なストアド プロシージャがあります。問題は、さまざまな時点で、バインドされた値の一部が NULL になる可能性があることです。これらのバインドされた値を後で別のクエリで使用できるようにしたいと思います。たとえば、次のようになります。

select * from table
where column = value;

問題はvalue、クエリが壊れる NULL であることです。を行う必要があることに気付きwhere column is null、過去に値を評価した後に動的クエリを作成しました。

NULL 値と入力された VARCHAR2 値の両方をカバーするために、この比較を簡単に行うにはどうすればよいですか?

4

4 に答える 4

5

1つの簡単な解決策は次のとおりです。

where ((value is null     and column is null) or
       (value is not null and column = value))

列のインデックスが実際に (column,0) にあることを確認して、null 値が含まれるようにすることができます (オプティマイザーはそれらが含まれていることを認識します)。

于 2013-09-19T20:53:50.500 に答える
2

値をNULL等しいものとして比較する場合:

select *
from table
where (column = value or column is null and value is null);
于 2013-09-19T20:53:27.373 に答える
0

NVl(value,'null の場合に割り当てる値') を使用する

これはオラクル固有です。

于 2013-09-19T20:54:43.340 に答える
0

where (column is null) OR (column = value)多分?

于 2013-09-19T20:49:37.973 に答える