使用Groovy批处理异构SQL语句?

使用Groovy批处理异构SQL语句?,sql,groovy,batch-processing,Sql,Groovy,Batch Processing,讨论如何在批处理中执行多个准备好的语句。但是所有语句都必须具有相同的结构(作为顶级参数传递给with batch) 是否有一种方法可以批量生成异构的准备语句,如: sql.withBatch {ps -> ps.addBatch("insert into t1 values(:a, :b)", [a:1, b:2]) ps.addBatch("insert into t2 values(:c)", [c:3]) } (这会引发异常,因为addBatch没有该签名。)如中所

讨论如何在批处理中执行多个准备好的语句。但是所有语句都必须具有相同的结构(作为顶级参数传递给
with batch

是否有一种方法可以批量生成异构的准备语句,如:

sql.withBatch {ps ->
    ps.addBatch("insert into t1 values(:a, :b)", [a:1, b:2])
    ps.addBatch("insert into t2 values(:c)", [c:3])
}
(这会引发异常,因为
addBatch
没有该签名。)

如中所述:

准备好的声明: 使用不同的绑定变量重复相同的语句

批量更新: 通过将多个UPDATE、DELETE或INSERT语句分组到单个批中,并将整个批发送到数据库并在一次处理过程中进行处理,可以减少到数据库的往返次数,从而提高应用程序性能。这在与准备好的语句结合使用时特别有用

如中所述,摘自:

支持JDBC2.0及以上版本的JDBC驱动程序支持批处理 更新。使用批更新,而不是更新DB2(R)的行 表一次一个,您可以指示JDBC执行一组更新 同时,。可以包含在同一批报表中的语句 更新称为批处理语句

如果语句具有输入参数或宿主表达式,则可以 仅在具有其他实例的批处理中包含该语句 同样的说法。这种类型的批次称为均质批次。如果 语句没有输入参数,可以将该语句包含在 仅当批处理中的其他语句没有输入时,才使用批处理 参数或宿主表达式。这种类型的批次称为 异构批次。可以包含在同一文档中的两个语句 批处理称为批处理兼容

这意味着您的请求是不可能的。您可以获得的唯一优势是,对相同类型的语句进行批处理并只准备一次,从而提高了性能:

执行单个SQL语句时,数据库将执行以下操作:

  • 准备声明
  • 绑定参数
  • 执行该语句
使用批处理命令时,会发生以下情况:

  • 准备对账单(在一次传输中全部接收)
  • 对于以下所有具有不同参数的相同语句
    • 绑定参数
    • 执行该语句
因为只有在节省时间后才执行准备

但您可以对命令进行排序和拆分:

sql.withBatch(20, "insert into t1 values(:a, :b)") {
    ...
}
sql.withBatch(20, "insert into t2 values(:c)") {
    ...
}
顺便说一句,要编译的是

sql.withBatch {ps ->
    ps.addBatch("insert into t1 values(1, 2)")
    ps.addBatch("insert into t2 values(3)")
}

但是,在这种情况下,我很好奇会发生什么:我希望JDBC驱动程序不会简单地使用批处理。对于这个例子,

< P>,考虑编写一个数据库的存储过程(),它占用三个参数并插入两个记录。应用程序可以用一条准备好的语句调用该过程,并且可以对该语句进行批处理