JDBC批处理在insert语句中使用“ CASE WHEN”

时间:2018-08-02 10:29:59

标签: java oracle jdbc

我不知道这样的事情是否可能:

PreparedStatement stm = connection.prepareStatement("INSERT INTO TABLE(DATE,VALUE) VALUES (?, (CASE WHEN ? IS NULL THEN 'N' ELSE ? END))");
stm.setDate(1, date);
stm.setString(2, value);
//stm.setString(3, value); -> without this
stm.addBatch();
....
stm.executeBatch();

因为总共3个“?”在插入字符串中,需要添加另一个stm.setString(3, value)

  1. 是否可以避免再次设置值-> stm.setString(3, value)? 如果是,正确的语法是什么?

  2. 是否可以批量执行此类操作?

这对我有用:

"INSERT INTO TABLE(DATE,VALUE) VALUES (TRUNC(TO_TIMESTAMP(?,'YYYY-MM-DD HH24:MI:SS.FF')), ?)"

但是诸如CASE WHEN ...等更复杂的语句呢?

在这种情况下,我知道最好使用默认的列值,例如:

VALUE  CHAR(1)   default 'N' 

1 个答案:

答案 0 :(得分:3)

您可以使用NVL来避免重复参数值

NVL(?, 'N')
  

NVL使您可以在查询结果中用字符串替换null(返回为空白)。

P.S。对于更复杂的语句,您可以使用decode作为

  decode(?, null, 'N', 'SOMEVALUE','REPLACEVALUE', 'DEFAULTVALUE')