grails - 从Grails服务调用PLSQL存储的proc

标签 grails groovy plsql oracle11g

在关闭部分方面需要一点帮助,也许还需要更多帮助。我正在尝试从Grails服务中调用Oracle 11g中的存储过程。

至今:

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 STORED PROCS IN 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()

最佳答案

sql.call结果转换为GroovyResultSet。您应该能够在结果集上执行eachRow并将其推送到列表中。

def listPeople(){
    Sql sql = new groovy.sql.Sql(dataSource)
    def resultList = []

    sql.call("BEGIN mypackage.p_get_people(?); END;",
            [Sql.resultSet(OracleTypes.CURSOR)]) {cursorResults -> 
            cursorResults.eachRow{result ->
                resultList << result
            }
    }
    return resultList
}

编辑:

或者使用sql.eachRow
    sql.eachRow("BEGIN mypackage.p_get_people(?); END;",
            [Sql.resultSet(OracleTypes.CURSOR)]) {row -> 
                resultList << row
    }

关于grails - 从Grails服务调用PLSQL存储的proc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427270/

相关文章:

java - 我在尝试将 PlSql Grammar 与 Antlr4 一起使用时是否错过了一个步骤?

Grails Controller 和 URL 映射魔法

hibernate - Grails/Hibernate不会在MySQL Linux上自动创建表

mysql - Grails 中的 Cloud Foundry v2

Jenkins pipelineTriggers 选项崩溃

sql - 正则表达式到以下字符串

java - 打包应用程序时 Grails 3 错误 - 无法解析配置 ':gspCompile' 的所有依赖项

java - 找不到 : java. time.LocalDate() 的匹配构造函数

java - 是否有使用 Groovy 进行单元测试(以及集成或回归,如果适用)的情况?

oracle - 在 Toad 的输出参数中显示结果