我在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;在那边。请提示如何在这种情况下使用绑定变量?
答案 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。