Почему я застреваю при выполнении запроса IN с Groovy для запуска с Oracle - PullRequest
2 голосов
/ 22 июня 2010

Я пытаюсь сделать оператор in со значениями из БД, а затем использовать их в другом запросе. БД - 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'"]

Кроме того, копирование вставки запроса возвращает результат в БД !!

Обновление

После поиска в Google, нашел эту ссылку Получается, что мы должны использовать подготовленные утверждения. Будем исследовать, как изменить код соответственно.

1 Ответ

0 голосов
/ 25 июня 2010

Работает ли это, если вы измените строку на:

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

Это должно сделать умный SQL-код неумным и попытаться преобразовать GString в PreparedStatement (что, как вы указываете, не работает)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...