DB2:在复杂的批处理查询中使用NOT EXISTS和SYSIBM.DUAL

时间:2011-09-05 10:49:48

标签: sql db2 spring-batch

我将java对象中的数据作为data1,data2。

data1和data2一起在myTable中形成一个复合键,我想在其中插入对象。

写作是批量发生的。像10个插入语句一样使用10个对象准备并作为批处理执行。

我想用约束插入上面的数据:data1 + data2不应该已经存在于myTable中,即data1 + data2应该是唯一的 - 如果是唯一的则写入else只是忽略。

我使用的查询是:

Insert into mySchema.myTable(column1, column2)
  select 'abc', '123'
  from SYSIBM.DUAL
  where not exists
        ( select 1 
          from mySchema.myTable A 
          where 'abc' = A.column1 
            and '123' = A.column2
        )

单独运行以上查询以成功运行单组数据。

但是,在批处理方案中运行时,我收到“com.ibm.db2.jcc.b.ie:非原子批处理失败”。错误。

我认为这与在批处理场景中使用SYSIBM.DUAL有关。

失败的代码:

插入查询:

Insert into mySchema.myTable(column1, column2)
select ?,? from SYSIBM.DUAL
where not exists (
  select 1 from mySchema.myTable A
  where ?=A.column1 and ?=A.column2)

声明制定者:

ps.setString(1, item.getColumn1());
ps.setString(2, item.getColumn2());
ps.setString(3, item.getColumn1());
ps.setString(4, item.getColumn2());

其中item是包含要写入的两列的java对象。

错误是:

  

org.springframework.jdbc.BadSqlGrammarException:PreparedStatementCallback;错误的SQL语法[插入mySchema.myTable(column1,column2)选择?,?来自SYSIBM.DUAL不存在(从mySchema.myTable A中选择1,其中?= A.column1和?= A.column2)];嵌套异常是com.ibm.db2.jcc.b.ie:非原子批处理失败。批次已提交,但批次的单个成员至少发生了一个例外。使用getNextException()来检索特定批处理元素的异常。

0 个答案:

没有答案