在SoapUI/ReadyAPI中使用Groovy,我试图将一个查询的结果传递给另一个查询的IN语句,以便能够对结果运行断言。但是,我没有得到我想要的结果。如何将结果集合/列表传递到Groovy中的SQL 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语句?
在此先感谢您的帮助。
你确定你的SQL查询,你得到上面的字符串作为回应?或xml响应?你想如何使用上述数据?你可以发布类似于你的回复的数据吗? – Rao
我想在web服务运行后验证数据库。 Web服务响应中没有任何内容写入数据库。我在请求中传入一个组号码,该服务取得成功。在幕后,服务会更新数据库中与我给出的组号相关的所有合同。例如,我给它'123',服务将更新所有链接到123的A,B和C以及特定值。我想确保为所有合同更新具体的价值。 – JesseN