Нужна небольшая помощь с закрытием этой части, и, может быть, немного больше. Я пытаюсь вызвать хранимую процедуру в Oracle 11g из службы Grails.
Уже:
import java.sql.*
import groovy.sql.Sql
import oracle.jdbc.driver.OracleTypes
class DummyService {
def dataSource
def serviceMethod() {
}
def listPeople(){
Sql sql = new groovy.sql.Sql(dataSource)
def resultList = []
sql.call("BEGIN mypackage.p_get_people(?); END;",
[Sql.resultSet(OracleTypes.CURSOR)]) {cursorResults ->
if(cursorResults.next()) {
results = cursorResults.getAt(1);
}
}
return resultList
}
Итак, это возвращает данные первых строк, и в зависимости от того, что передается методу getAt(), я могу получить этот столбец. Которые я нашел здесь СОХРАНЕННЫЕ ПРОЦЕССЫ ORACLE В GRAILS
Что я действительно хочу, так это вернуть набор результатов и поместить его в список, я просто не знаю, как это сделать.
При попытке {cursorResults -> println cursorResults}
выдает ошибку
Message: org.apache.commons.dbcp.DelegatingCallableStatement with Address: "oracle.jdbc.driver.T4CCallableStatement@...."is closed
Запустив эту процедуру непосредственно в Oracle, в курсоре будет 457 строк, если это вообще поможет.
Редактировать 1: Ответ на dmahapatro, это NPE
| Error 2013-05-07 14:16:05,123 [http-bio-8080-exec-1] ERROR errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [GET] /testapp/messages/list
Stacktrace follows:
Message: null
Line | Method
->> 15 | list in testapp.MessagesController$$EO5AzzAw
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
| 908 | run . . in ''
^ 662 | run in java.lang.Thread
И прямо сейчас строка 15 просто println dummyService.listPeople()
cursorResults
? Могу ли я увидеть исключение? 08.05.2013