无法使用 OUT 参数 oracletypes.cursor 调用 pl-sql 存储过程

发布于 2024-10-17 11:55:46 字数 1887 浏览 7 评论 0原文

我需要一些帮助才能在 Groovy 中调用 Oracle 存储过程并通过输出参数接收结果集。 我可以使用其他数据类型的输出参数调用存储过程,但是对于 CURSOR 我找不到方法。

“我总是收到错误“java.sql.SQLException:游标已关闭。” 参数(如下)是:“Sql.out(OracleTypes.CURSOR), // lista de possiveis varios items a consumir

在我的代码下面(连接已经打开我

def consumeProvisioning(Sql sql) {

int nRes

sql.call("{call Provisioning.ConsumirAprovisionamento(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}",
[
Sql.out(Sql.INTEGER.type), // quantidade possivel de consumir
new java.sql.Date(2012,1,1), // Data Para Validação
'testclient0000001', // IDCliente
'*', // IDCatalogo
'*', // Titulo
'*', // IDObjecto
'*', // IDAcervo
'*', // Autor
'*', // Origem
'*', // ZonaGeo
'FOTO', // Tipo Conteudo     
'*', // Canal
'*', // Context
'*', // URLString
1, // Quantidade a consumir
'UNI', // Unidade do Stock
new java.sql.Date(2011,1,1), // Data Conteudo
1, // Mes
1, // Dia
1, // Hora
1, // Minuto
'GLOBAL_IMAGEM', // Site client
1, // ScopeID
'[email protected]', //UserID
null, // Tag
null, // Metadado
'*', // FOTO FORMATO
'*', // FOTO QUALIDADE   
null, // Video Formato
null, // Video Qualidade
null, // Som Formato
null, // Som Qualidade
null, // Artigo Formato
null, //IDProvisioningMaster
null, // Data de validade a colocar no consumo inline. Normalmente vai a null, pois o provisioning encarrega-se de verificar qual a mais adequada
new java.sql.Date(2011,12,31), // CriadoEm
'josecruz', // CriadoPor
new java.sql.Date(2011, 12, 31), // ActualizadoEm
'josecruz', // ActualizadoPor
Sql.out(OracleTypes.CURSOR), // lista de possiveis varios items a consumir
'FOTO2CONSUME1' // ID do objecto a consumir
]) {param1, param2 -> nRes = param1}

nRes

}

谢谢! 何塞·克鲁兹

I need some help to call a Oracle Stored Procedure in Groovy and receive a ResultSet by an Output Parameter.
I can call stored procedure with output parameters of other data types, but for CURSOR I cannot find the way.

"I'm always getting the error "java.sql.SQLException: Cursor is closed."
The parameter (bellow) is: "Sql.out(OracleTypes.CURSOR), // lista de possiveis varios items a consumir"

Below my code (The connection is already openI

def consumeProvisioning(Sql sql) {

int nRes

sql.call("{call Provisioning.ConsumirAprovisionamento(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}",
[
Sql.out(Sql.INTEGER.type), // quantidade possivel de consumir
new java.sql.Date(2012,1,1), // Data Para Validação
'testclient0000001', // IDCliente
'*', // IDCatalogo
'*', // Titulo
'*', // IDObjecto
'*', // IDAcervo
'*', // Autor
'*', // Origem
'*', // ZonaGeo
'FOTO', // Tipo Conteudo     
'*', // Canal
'*', // Context
'*', // URLString
1, // Quantidade a consumir
'UNI', // Unidade do Stock
new java.sql.Date(2011,1,1), // Data Conteudo
1, // Mes
1, // Dia
1, // Hora
1, // Minuto
'GLOBAL_IMAGEM', // Site client
1, // ScopeID
'[email protected]', //UserID
null, // Tag
null, // Metadado
'*', // FOTO FORMATO
'*', // FOTO QUALIDADE   
null, // Video Formato
null, // Video Qualidade
null, // Som Formato
null, // Som Qualidade
null, // Artigo Formato
null, //IDProvisioningMaster
null, // Data de validade a colocar no consumo inline. Normalmente vai a null, pois o provisioning encarrega-se de verificar qual a mais adequada
new java.sql.Date(2011,12,31), // CriadoEm
'josecruz', // CriadoPor
new java.sql.Date(2011, 12, 31), // ActualizadoEm
'josecruz', // ActualizadoPor
Sql.out(OracleTypes.CURSOR), // lista de possiveis varios items a consumir
'FOTO2CONSUME1' // ID do objecto a consumir
]) {param1, param2 -> nRes = param1}

nRes

}

thanks!
José Cruz

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

π浅易 2024-10-24 11:55:46

在您调用的数据库过程中,游标 OUT 参数需要是 REF CURSOR,而不是常规游标。

In the database procedure you're calling, the cursor OUT parameter needs to be a REF CURSOR, not a regular cursor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文