我正在尝试以常规方式执行一些存储过程。通过使用直接的 JDBC,我可以很容易地做到这一点,但这似乎不符合 Grails 的精神。
我试图将存储过程称为:
sql.query( "{call web_GetCityStateByZip(?,?,?,?,?)}",[params.postalcode,
sql.out(java.sql.Types.VARCHAR), sql.out(java.sql.Types.VARCHAR),
sql.out(java.sql.Types.INTEGER), sql.out(java.sql.Types.VARCHAR)]) { rs ->
params.city = rs.getString(2)
params.state = rs.getString(3)
}
我尝试了各种方法,例如
sql.call
.在此之后我试图获取输出变量值。每次错误:
Message: Cannot register out parameter.
Caused by: java.sql.SQLException: Cannot register out parameter.
Class: SessionExpirationFilter
但这似乎不起作用。
谁能指出我正确的方向?
最佳答案
这仍然没有答案,所以我做了一些挖掘,虽然我不完全理解这个问题。以下来自 Groovy 源代码,也许它有一些帮助:
这条线似乎是异常的起源:
http://groovy.codehaus.org/xref/groovy/sql/Sql.html#1173
这似乎表明您有一个实现 PreparedStatement 的 Statement 对象,当您需要子接口(interface) CallableStatement 时,它具有应该最终调用的 registerOutParameter() 方法。
关于stored-procedures - 使用 groovy.sql Out 参数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/103136/