我有更新SQL语句来更新行
UPDATE COM_TRANSACTION_LOGS
SET END_TIME = ?,
RESPONSE = ?
WHERE
TRANSACTION_ID = ?
AND
MESSAGE_ID = ?
这里的问题是MESSAGE_ID
在某些情况下可以为null,因此更新SQL为
[DEBUG] {pstm-100101} Parameters:[2013-05-14 10:38:01.485, XML, 123XYZAAA1236511, null]
由于where子句变为
,因此无法更新WHERE
TRANSACTION_ID = '123XYZAAA1236511'
AND
MESSAGE_ID = null
如何通过预准备语句与空值进行比较。
我知道null比较的where子句必须像这样
WHERE
TRANSACTION_ID = '123XYZAAA1236511'
AND
MESSAGE_ID is null
如何在不使用两个查询的情况下将where子句设置为is null
,并在null
或='somevalue
答案 0 :(得分:4)
在Oracle中,有一个NVL语句用于完成此操作(nvl(?, value_to_replace_null)
)。我不确定你正在使用的SQL的哪种变体,但可能有类似的东西。您也可以将IFNULL, ISNULL, and COALESCE用于SQL Server和MySQL。
答案 1 :(得分:4)
您可以替换此行:
MESSAGE_ID = ?
由此:
COALESCE(MESSAGE_ID,-1) = COALESCE(?,-1)
答案 2 :(得分:0)
我更希望将NVL / NVL2用于您的目的。它完成了工作。