在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