2

我有一个简单的存储过程,它动态地从游标中获取值。问题是在不同的点上,一些绑定值可能是 NULL。我希望稍后能够在另一个查询中使用这些绑定值,例如:

select * from table
where column = value;

问题是valueis NULL 会破坏查询。我意识到我需要做一个where column is null并且过去我在评估值后创建了动态查询。

如何简单地进行此比较以涵盖 NULL 值和填充的 VARCHAR2 值?

4

4 回答 4

5

一种直接的解决方案是:

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

您可能希望确保列上的索引实际上位于 (column,0) 上,以便包含空值(并且优化器知道它们已包含在内)。

于 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

where (column is null) OR (column = value)也许?

于 2013-09-19T20:49:37.973 回答
0

使用 NVl(value,'value 赋值 if null')

这是特定于 Oracle 的。

于 2013-09-19T20:54:43.340 回答