为什么我在使用Groovy进行IN查询以阻止Oracle运行时遇到困难

时间:2010-06-22 17:28:43

标签: oracle list string groovy

我正在尝试使用来自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所以我们必须使用准备好的语句。将研究如何相应地更改代码。

1 个答案:

答案 0 :(得分:0)

如果将行更改为:

,是否有效
  myQuery = "select * from USER_TABLE where USER_ID in (${myList.join(",")})" as String

这应该会阻止groovy SQL变得聪明并尝试将你的GString转换为PreparedStatement(正如你所指出的那样,不起作用)