使用 Groovy 的多个 SQL 语句

Multiple SQL statements using Groovy

在 SoapUI

中使用 Groovy 从数据库中删除多个条目

我能够执行一个 SQL 语句,但是当我执行几个语句时它就挂起。

如何删除多行?

  def sql = Sql.newInstance('jdbc:oracle:thin:@jack:1521:test1', 'test', 'test', 'oracle.jdbc.driver.OracleDriver')
    log.info("SQL connetced")
  sql.connection.autoCommit = false

  try {
log.info("inside try")
  log.info("before")
  String Que =
  """delete from table name where user in (select user  from user where ID=    '123' and type= 262);
 delete from table name where user in (select user  from user where ID= '1012' and type= 28)
 delete from table name where user in (select user  from user where ID= '423' and type= 27)
"""
  log.info (Que)
 def output = sql.execute(Que);

   log.info(sql)

               log.info(output)
     log.info("after")

     sql.commit()
     println("Successfully committed")

  }catch(Exception ex) {
     sql.rollback()
     log.info("Transaction rollback"+ex)
  }

  sql.close()

这是您要查找的内容。

我觉得如果你想使用以下方式批量记录,这是更有效的方法。

  • 为数据创建一个映射,即 id,类型作为需要在您的情况下删除的键值对。
  • 使用闭包通过迭代执行查询。

适当地添加了评论。

//Closure to execute the query with parameters
def runQuery = { entry ->
    def output = sql.execute("delete from table name where user in (select user  from user where ID=:id and type=:type)", [id:entry.key, type:entry.value] )
    log.info(output)    
}

//Added below two statements
//Create the data that you want to remove in the form of map id, and type
def deleteData = ['123':26, '1012':28, '423':27]

def sql = Sql.newInstance('jdbc:oracle:thin:@jack:1521:test1', 'test', 'test', 'oracle.jdbc.driver.OracleDriver')
log.info("SQL connetced")
sql.connection.autoCommit = false
try {
    log.info(sql)
    log.info("inside try")
    log.info("before")
    //Added below two statements
    //Call the above closure and pass key value pair in each iteration
    deleteData.each { runQuery(it) }
    log.info("after")

    sql.commit()
    println("Successfully committed")

}catch(Exception ex) {
    sql.rollback()
    log.info("Transaction rollback"+ex)
}

sql.close()

如果您只是关注执行多个查询的唯一方法,那么您可能会查看 here 并且不确定您的数据库是否支持相同的方法。