如何将结果的集合/列表传递到Groovy中的SQL IN语句?

时间:2017-05-08 17:13:58

标签: sql groovy soapui

在SoapUI / ReadyAPI中使用Groovy,我试图将一个查询的结果传递给另一个查询的IN语句,以便能够针对结果运行断言。但是,我没有得到我想要的结果。

这是我现在拥有的。我从JDBC查询中获取groupNumber并将其传递给第一个查询以获取所有关联合同。我将这些结果保存到集合中。

然后我将该查询的结果转换为inStatement。我需要将结果用单引号括起来,用逗号分隔。

在那之后,对我来说事情变得艰难。目前,我将查询结果保存到集合中,也许这不是最好的方法吗?如果我尝试在查询中传递$ inStatement,我会得到一个空集合。如果我尝试传递我用于创建inStatement的代码,我会收到意外令牌的编译错误(这取决于我如何尝试传递代码,用双引号括起来,单引号等等但总是得到编译错误)。

这是我的代码:

def groupBillPolicies = []
sql.eachRow("SELECT column1 as column1 FROM table1 WHERE groupnumber = $groupNumber") {row ->
groupBillPolicies.add(row.column1)
}

String inStatement = groupBillPolicies.collect{"'$it'"}.join(",")

def sqlDataObjects = []
sql.eachRow("select trim(column2) as column2 from table2 where contract in ($inStatement) order by date desc fetch first 1 rows only") {row ->
sqlDataObjects.add(row.column2)
assert 'Validation Text' == row.column2
}

我在inStatement之后有log.info,看看会传递什么,看起来对我来说是正确的。每个值都用单引号括起来并用逗号分隔,但同样,将它传递给我的第二个查询会返回一个空集合。

我也尝试过以下代码,而不是在第一个查询中创建结果集合。

 def groupBillPolicies = sql.rows("SELECT column1 as column1 FROM table1 WHERE groupnumber = $groupNumber")   

这是以我无法使用的格式返回结果。

[[Column:Value], [Column:Value]]

我可以使用replaceAll从字符串中删除“Column:”,但我无法删除每个值周围的括号。

如何正确地将集合传入IN语句?

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:1)

这个怎么样?

def response = [["Column1":"Value1"], ["Column2":"Value2"]]
response.collect{ item ->
   item.collect {
         println "key : ${it.key}, value : ${it.value}"
   }
}

我相信你可以在item.collect

中执行你的SQL查询