Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我在使用Groovy进行针对Oracle的查询时遇到了麻烦_Oracle_List_String_Groovy - Fatal编程技术网

为什么我在使用Groovy进行针对Oracle的查询时遇到了麻烦

为什么我在使用Groovy进行针对Oracle的查询时遇到了麻烦,oracle,list,string,groovy,Oracle,List,String,Groovy,我试图在语句中使用来自DB的值生成一个,然后在另一个查询中使用它们。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

我试图在语句中使用来自DB的值生成一个
,然后在另一个查询中使用它们。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!!"
此外,复制粘贴查询将在数据库中返回结果

更新


谷歌搜索后,发现这一点,所以我们不得不使用事先准备好的声明。将研究如何相应地更改代码

如果将行更改为:

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

这应该可以阻止groovy SQL聪明地尝试将GString转换为PreparedStatement(正如您所指出的,它不起作用)

如果将行更改为:

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

这将阻止groovy SQL变得聪明,并试图将GString转换为PreparedStatement(正如您所指出的,它不起作用)

另外,以这种方式构建查询不应该是生产环境中的常规做法。尽可能使用绑定变量-它支持SQL语句共享/重用。不能用返回所需值的子查询替换硬编码的IN列表吗?@DCookie这不是生产代码。我只是在编写一个脚本来验证一些东西,并认为在groovy中会更容易。我不可能替换那些硬编码的值,因为我从其他地方获取它们。他们不在同一个计划中。我的评论仅供参考。这是一种常见的编码实践,当“解决方案”试图扩展时,它会严重影响性能。我接受您的断言,即您无法在查询中获取值,但处于不同的模式并不一定会阻止您在此处选择这些值。顺便说一句,在生产环境中,以这种方式构建查询不应该是一种常规做法。尽可能使用绑定变量-它支持SQL语句共享/重用。不能用返回所需值的子查询替换硬编码的IN列表吗?@DCookie这不是生产代码。我只是在编写一个脚本来验证一些东西,并认为在groovy中会更容易。我不可能替换那些硬编码的值,因为我从其他地方获取它们。他们不在同一个计划中。我的评论仅供参考。这是一种常见的编码实践,当“解决方案”试图扩展时,它会严重影响性能。我接受您的断言,即您无法在查询中获取值,但处于不同的模式并不一定排除您在此处选择它们。
  myQuery = "select * from USER_TABLE where USER_ID in (${myList.join(",")})" as String