Ajuda com Stored Procedures e JDBC

3 respostas
neguinho_etav

Opa galera,

Depois de muito bater cabeça, decidir aparecer por aqui pra tirar 1 duvida intrigante...

Estou com um problema na execução de stored procedures em java... segue meu codigo:

try {

            Connection conn = HibernateUtil.getDataSource().getConnection();
            CallableStatement c = conn.prepareCall("begin ? := f_relatoriotrocas(?, ?, ?, null, null); end;");
            c.registerOutParameter(1, OracleTypes.CURSOR);
            c.setDate(2, new java.sql.Date(dataInicio));
            c.setDate(3, new java.sql.Date(dataFinal));
            c.setInt(4, codigoEstabelecimento);
            c.execute();
           
        } catch (Exception e) {
            e.printStackTrace();
        }

Onde dataInicio e dataFinal são tipo long e codigo estabelecimento é 1 int.

O cabeçalho da SP

CREATE OR REPLACE FUNCTION f_relatoriotrocas (
P_DTINICIAL IN T_TROCA.DATA%TYPE,
P_DTFINAL IN T_TROCA.DATA%TYPE,
P_IDESTABELECIMENTO IN T_ESTABELECIMENTO.IDESTABELECIMENTO%TYPE,
P_IDCLIENTE IN T_TROCA.CODIGOCLIENTE%TYPE,
P_IDORCAMENTO IN T_ORCAMENTO.IDORCAMENTO%TYPE

)

Onde os campos DATA nas tabelas são do tipo Date e os campos ID* são do tipo Number.

Essa stored procedure retorna 1 cursor. Até ai tudo bem... mas quando eu executo o codigo la dá o seguinte erro:

[exec] [#|2008-12-16T09:30:17.902-0200|WARNING|sun-appserver9.1|javax.enterprise.system.stream.err|_ThreadID=17;_ThreadName=httpSSLWorkerThread-8080-1;_RequestID=72aef0a5-df3a-4de3-b290-b629328ef90c;|
     [exec] java.sql.SQLException: Tamanho de tipo maior que o Máximo
     [exec]     at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
     [exec]     at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
     [exec]     at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:885)
     [exec]     at oracle.jdbc.driver.T4CMAREngine.buffer2Value(T4CMAREngine.java:2202)
     [exec]     at oracle.jdbc.driver.T4CMAREngine.unmarshalUB2(T4CMAREngine.java:1051)
     [exec]     at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:112)
     [exec]     at oracle.jdbc.driver.T4CTTIdcb.receiveFromRefCursor(T4CTTIdcb.java:104)
     [exec]     at oracle.jdbc.driver.T4CResultSetAccessor.unmarshalOneRow(T4CResultSetAccessor.java:167)
     [exec]     at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:792)
     [exec]     at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:708)
     [exec]     at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:530)
     [exec]     at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:181)
     [exec]     at oracle.jdbc.driver.T4CCallableStatement.execute_for_rows(T4CCallableStatement.java:784)
     [exec]     at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1027)
     [exec]     at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2885)
     [exec]     at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:2976)
     [exec]     at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4112)
     [exec]     at com.neus.erp.business.relatorio.troca.ColecaoTrocas.getColecaoEstabelecimento1(ColecaoTrocas.java:391)
     [exec]     at com.neus.erp.business.fachada.ComplementoErpFachadaComColecao.getColecaoEstabelecimento(ComplementoErpFachadaComColecao.java:3617)
     [exec]     at com.neus.erp.business.fachada.Generated_ErpFachadaComposta.getColecaoEstabelecimento(Generated_ErpFachadaComposta.java:5187)
     [exec]     at com.neus.erp.gui.relatorio.trocas.TrocasAction.geraRelatorioPost(TrocasAction.java:232)
     [exec]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [exec]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     [exec]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     [exec]     at java.lang.reflect.Method.invoke(Method.java:585)
     [exec]     at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:276)
     [exec]     at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:196)
     [exec]     at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
     [exec]     at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
     [exec]     at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
     [exec]     at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
     [exec]     at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
     [exec]     at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
     [exec]     at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
     [exec]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
     [exec]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
     [exec]     at com.neus.gui.servlet.HibernateFiltroServlet.doFilter(HibernateFiltroServlet.java:41)
     [exec]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
     [exec]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
     [exec]     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
     [exec]     at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
     [exec]     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     [exec]     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
     [exec]     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     [exec]     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     [exec]     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     [exec]     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     [exec]     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     [exec]     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     [exec]     at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
     [exec]     at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
     [exec]     at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
     [exec] |#]
     [exec] [#|2008-12-16T09:31:01.084-0200|WARNING|sun-appserver9.1|javax.enterprise.system.core.transaction|_ThreadID=17;_ThreadName=httpSSLWorkerThread-8080-1;_RequestID=72aef0a5-df3a-4de3-b290-b629328ef90c;|JTS5064: Unexpected exception occurred while delisting the resource
     [exec] oracle.jdbc.xa.OracleXAException
     [exec]     at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1018)
     [exec]     at oracle.jdbc.xa.client.OracleXAResource.end(OracleXAResource.java:353)
     [exec]     at com.sun.gjc.spi.XAResourceImpl.end(XAResourceImpl.java:100)
     [exec]     at com.sun.jts.jta.TransactionState.beforeCompletion(TransactionState.java:161)
     [exec]     at com.sun.jts.jta.SynchronizationImpl.before_completion(SynchronizationImpl.java:133)
     [exec]     at com.sun.jts.CosTransactions.RegisteredSyncs.distributeBefore(RegisteredSyncs.java:158)
     [exec]     at com.sun.jts.CosTransactions.TopCoordinator.beforeCompletion(TopCoordinator.java:2548)
     [exec]     at com.sun.jts.CosTransactions.CoordinatorTerm.commit(CoordinatorTerm.java:278)
     [exec]     at com.sun.jts.CosTransactions.TerminatorImpl.commit(TerminatorImpl.java:249)
     [exec]     at com.sun.jts.CosTransactions.CurrentImpl.commit(CurrentImpl.java:623)
     [exec]     at com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:309)
     [exec]     at com.sun.enterprise.distributedtx.J2EETransactionManagerImpl.commit(J2EETransactionManagerImpl.java:1030)
     [exec]     at com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J2EETransactionManagerOpt.java:397)
     [exec]     at com.sun.enterprise.distributedtx.UserTransactionImpl.commit(UserTransactionImpl.java:197)
     [exec]     at com.neus.gui.servlet.HibernateFiltroServlet.doFilter(HibernateFiltroServlet.java:47)
     [exec]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
     [exec]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
     [exec]     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
     [exec]     at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
     [exec]     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     [exec]     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
     [exec]     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     [exec]     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     [exec]     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     [exec]     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     [exec]     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     [exec]     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     [exec]     at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
     [exec]     at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
     [exec]     at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
     [exec] |#]
     [exec] [#|2008-12-16T09:31:01.086-0200|SEVERE|sun-appserver9.1|javax.enterprise.system.core.transaction|_ThreadID=17;_ThreadName=httpSSLWorkerThread-8080-1;org.omg.CORBA.INTERNAL:   vmcid: 0x0  minor code: 0 completed: Maybe;rollback;_RequestID=72aef0a5-df3a-4de3-b290-b629328ef90c;|JTS5031: Exception [org.omg.CORBA.INTERNAL:   vmcid: 0x0  minor code: 0 completed: Maybe] on Resource [rollback] operation.|#]
     [exec] [#|2008-12-16T09:31:01.091-0200|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=17;_ThreadName=httpSSLWorkerThread-8080-1;_RequestID=72aef0a5-df3a-4de3-b290-b629328ef90c;|StandardWrapperValve[controle]: PWC1406: Servlet.service() for servlet controle threw exception
     [exec] javax.transaction.SystemException: org.omg.CORBA.INTERNAL: JTS5031: Exception [org.omg.CORBA.INTERNAL:   vmcid: 0x0  minor code: 0 completed: Maybe] on Resource [rollback] operation.  vmcid: 0x0  minor code: 0  completed: No
     [exec]     at com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:321)
     [exec]     at com.sun.enterprise.distributedtx.J2EETransactionManagerImpl.commit(J2EETransactionManagerImpl.java:1030)
     [exec]     at com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J2EETransactionManagerOpt.java:397)
     [exec]     at com.sun.enterprise.distributedtx.UserTransactionImpl.commit(UserTransactionImpl.java:197)
     [exec]     at com.neus.gui.servlet.HibernateFiltroServlet.doFilter(HibernateFiltroServlet.java:47)
     [exec]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
     [exec]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
     [exec]     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
     [exec]     at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
     [exec]     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     [exec]     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
     [exec]     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     [exec]     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     [exec]     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     [exec]     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     [exec]     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     [exec]     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     [exec]     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     [exec]     at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
     [exec]     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
     [exec]     at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
     [exec]     at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

Gostaria de saber se alguém poderia me ajudar com esse erro e como poder resolve-lo...

Aguardo respostas...

E antecipadamente agradeço a ajuda...

[]'s

3 Respostas

gilmaslima

Me corrija se eu estiver errado, mas…

c.registerOutParameter(1, OracleTypes.CURSOR); // <- aqui vc esta tentando recuperar um cursor OK  
c.setDate(2, new java.sql.Date(dataInicio));  
c.setDate(3, new java.sql.Date(dataFinal));  
c.setInt(4, codigoEstabelecimento);  
c.execute();

Mas…

// Todos seus parametros são IN (entrada) onde está o OUT (retorno)
    CREATE OR REPLACE FUNCTION f_relatoriotrocas (  
    P_DTINICIAL IN T_TROCA.DATA%TYPE,  
    P_DTFINAL IN T_TROCA.DATA%TYPE,  
    P_IDESTABELECIMENTO IN T_ESTABELECIMENTO.IDESTABELECIMENTO%TYPE,  
    P_IDCLIENTE IN T_TROCA.CODIGOCLIENTE%TYPE,  
    P_IDORCAMENTO IN T_ORCAMENTO.IDORCAMENTO%TYPE  
      
    )

Verifique também a ordem dos parametros…

fabim

Na epoca que eu usei SP’s cujo retorno era um Cursor, eu tive esse problema e solucionei-o simplesmente trocando a versao do .jar da oracle.
Verifique se nao existe uma versao mais atual.

neguinho_etav

gilmaslima,

O tipo Cursor é o tipo de retorno da stored procedure…

c.registerOutParameter(1, OracleTypes.CURSOR);

fabim,

Eu já fiz isso, mas o problema persistiu…

Criado 16 de dezembro de 2008
Ultima resposta 16 de dez. de 2008
Respostas 3
Participantes 3