我正在尝试使用来自DB的值创建in
语句,然后在另一个查询中使用它们。 DB是Oracle
示例:
我已经在这周围打了很长时间了。我需要一些帮助:
Groovy代码:
def myList = []
def myQuery = "select USER_ID from USER_TABLE where rownum < 3"
println myQuery
sql_dw.eachRow(myQuery) {
myList.add("'"+it.USER_ID+"'")
}
println myList
myQuery = "select * from USER_TABLE where USER_ID in (${myList.join(",")})"
println myQuery
def myRow = sql_dw.firstRow(myQuery);
if (myRow == null)
println "OMG its null!!"
输出是:
select USER_ID from eiv.USER_TABLE where rownum < 3
['5xsubmit', 'A10165']
select * from USER_TABLE where USER_ID in ('5xsubmit','A10165')
OMG its null!!
我不知道是什么导致了这个!!
如果我使用像
这样的硬编码值填充myList
,一切正常
def myList = ["'5xsubmit'", "'A10165'"]
此外,复制粘贴查询会在DB中返回结果!!
更新
谷歌搜索后,找到了这个link所以我们必须使用准备好的语句。将研究如何相应地更改代码。
答案 0 :(得分:0)
如果将行更改为:
,是否有效 myQuery = "select * from USER_TABLE where USER_ID in (${myList.join(",")})" as String
这应该会阻止groovy SQL变得聪明并尝试将你的GString转换为PreparedStatement(正如你所指出的那样,不起作用)