java - 当 where 子句条件可以为 null 时更新 SQL

标签 java sql oracle prepared-statement ibatis

我有一个 update SQL 语句来更新一行

   UPDATE COM_TRANSACTION_LOGS    
        SET END_TIME  = ?, 
        RESPONSE   = ?  
   WHERE   
   TRANSACTION_ID  = ?   
   AND    
   MESSAGE_ID  = ?  

这里的问题是 MESSAGE_ID 在某些情况下可以为空,因此更新 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=' 的情况下有条件地使用它们一些值

最佳答案

你可以替换这一行:

MESSAGE_ID  = ?  

由此:

COALESCE(MESSAGE_ID,-1) = COALESCE(?,-1)

关于java - 当 where 子句条件可以为 null 时更新 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546883/

相关文章:

java - 查找我的浮点值 ArrayList 的最小值

java - "The eclipse executable launcher was unable to locate its companion shared library"

php - 如何知道它是否通过 sql/php 中的 where 子句获得了行

mysql - MySQL中字符串数字部分的比较

oracle - 如何重用子查询

sql - Oracle 语法左连接三个或更多表

sql - Oracle SQL 语法 : Inner Join

java - 在 JAVA 中将数据写入 .txt 文件?

java - 使 PAX(OSGI 测试)框架更快的技巧

mysql - Sql:“哪里”和“与”