2017-05-08 160 views
1

在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语句?

在此先感谢您的帮助。

+0

你确定你的SQL查询,你得到上面的字符串作为回应?或xml响应?你想如何使用上述数据?你可以发布类似于你的回复的数据吗? – Rao

+0

我想在web服务运行后验证数据库。 Web服务响应中没有任何内容写入数据库。我在请求中传入一个组号码,该服务取得成功。在幕后,服务会更新数据库中与我给出的组号相关的所有合同。例如,我给它'123',服务将更新所有链接到123的A,B和C以及特定值。我想确保为所有合同更新具体的价值。 – JesseN

回答

1

这个怎么样?

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

我相信你可以执行内部item.collect

+0

谢谢。这让我朝着正确的方向前进。我将我的sqlDataObjects集合移入item.collect中,并在我的IN语句中使用$ {it.value}。 – JesseN

相关问题