2017-05-08 29 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

相關問題