【问题标题】:Multiple SQL statements using Groovy使用 Groovy 的多个 SQL 语句
【发布时间】:2016-11-25 00:42:29
【问题描述】:

在 SoapUI 中使用 Groovy 从 DB 中删除多个条目

我能够执行一条 SQL 语句,但是当我执行一些 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()

【问题讨论】:

  • 还要注意。当我直接从 sql developer 运行这些删除语句时。没有问题。没有延迟,只需不到 10 秒..
  • 请检查答案,看看是否有帮助。
  • JDBC 是面向语句的,因此一次只能执行一条语句。
  • 我没试过,但我觉得第二条也是最后一条SQL语句只是少了分号。

标签: sql jdbc groovy soapui


【解决方案1】:

这就是你要找的东西。

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

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

适当地添加了 cmets。

//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 并不确定您的数据库是否支持相同的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多