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



在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
}

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

我还尝试了下面的代码,而不是在第一个查询中创建结果集合。

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

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

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

我能够使用 replaceAll 从字符串中删除"列:",但我无法删除每个值周围的括号。

如何正确地将集合传递到 IN 语句中?

提前感谢任何帮助。

这个怎么样?

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

我相信您可以在item.collect内执行SQL查询

最新更新