如何将bind变量用于null值?

时间:2017-06-12 08:53:48

标签: sql oracle bind-variables

我在SQL下面有绑定变量。

UPDATE Table1 SET column1='102.0', column2='12-OCT-1999', column3='AG'
WHERE column4 =:1 and column5 =:2 and column6 =:3 and column7 =:4
AND column8=:5 AND column9=:6 AND NVL(column10,0) <=:7;

当第3和第4个绑定变量值为NULL并且表中的实际值也为空时,它不会更新该记录,因为应该有&#34;是NULL&#34;在那边。请提示如何在这种情况下使用绑定变量?

2 个答案:

答案 0 :(得分:2)

正如您所说,您需要使用is null,因此您可以使用or进行两种可能的检查 - 即 - 列值和变量都为空,或< / em>它们都不为空(隐式)和相等:

AND ((column7 IS NULL AND :4 IS NULL) OR column7 =:4)

或原地:

UPDATE Table1 SET column1='102.0', column2='12-OCT-1999', column3='AG'
WHERE column4 =:1
AND column5 =:2
AND column6 =:3
AND ((column7 IS NULL AND :4 IS NULL) OR column7 =:4)
AND ((column8 IS NULL AND :5 IS NULL) OR column8 =:5)
AND column9=:6
AND NVL(column10,0) <=:7;

答案 1 :(得分:0)

当绑定变量引用将使用Oracle DB填充或为空的一组值时,我对如何执行NULL检查也有类似的问题。我需要一种在数据不存在的情况下绕过关联AND子句的实际执行的方法。

这里是一个变体,显示了如何处理需要处理或忽略的一组数据。

AND ( (:user_id_set IS NULL)  OR  user_id IN (:user_id_set) )

在Oracle中,如果tag_id_set为空或NULL,则将其视为相同。如果为true,它将退出而不进行处理。如果为false(集合中存在值),Oracle将按预期处理AND子句,并将检查tag_id。