1

我有以下带有绑定变量的 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 并且表中的实际值也为 null 时,它不会更新该记录,因为那里应该有“is NULL”。请建议在这种情况下如何使用绑定变量?

4

2 回答 2

3

正如您所说,您需要使用is null,因此您可以使用or- 即 - 列值和变量都为空,或者它们都不是空(隐式)且相等:

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;
于 2017-06-12T09:12:19.380 回答
0

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

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

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

在 Oracle 中,如果 tag_id_set 为空或 NULL,则认为相同。当为真时,它会在不处理的情况下退出。当 false (值存在于集合中)时,Oracle 按预期处理 AND 子句,并且将检查 tag_id。

于 2018-09-12T17:54:18.747 回答