忽略jdbc批处理

时间:2017-05-03 21:28:01

标签: tsql jdbc groovy plsql

我有代码在SqlServer或Oracle表中进行批量插入。如何告诉JDBC如何A)如果其中一个插入语句失败,请继续 B)告诉我哪一个有问题

sql.withBatch("""Insert Into ${job.table}($columnNames)Values(${values})""") { stmt ->
    data.each{ Map<String, String> row ->
        stmt.addBatch(newMap)
    }
}

目前,如果其中一行存在问题,它会成功插入之前的所有内容,并在之后停止插入行。并且它会告诉我错误消息,但不会告诉我导致错误的数据。 java或groovy中的解决方案都很好。

我的问题与另一个问题不一样。他的问题特别是避免插入重复。我需要阻止批处理失败,因为插入因任何原因而失败。如果解决方案结果与sql相关,我需要Tsql和PL / SQL解决方案(另一篇文章特定于postgresql)

2 个答案:

答案 0 :(得分:2)

使用Oracle时,无法告诉驱动程序在发生错误时继续执行批处理(您的A不可能)。但是您可以捕获BatchUpdateException并调用getUpdateCounts()以了解哪些行已成功执行。该异常还将从数据库服务器返回错误消息。

答案 1 :(得分:0)

以下可以在Oracle中实现

1)创建错误记录表。

asum

2)将以下语句附加到您的sql

Nothing

3)现在研究错误

BEGIN
  DBMS_ERRLOG.create_error_log (dml_table_name => 'dest');
END;
/