Erro ao executar uma procedure em Java com o CallableStatemant  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
rbamartins
JavaEvangelist
[Avatar]

Membro desde: 01/03/2007 16:10:11
Mensagens: 358
Localização: Salvador
Offline

Não sei se estou no Fórum certo do GUJ.

Estou tendo o seguinte erro quando tento executar uma procedure em Java:



Minha chamada a procedure na classe java é a seguinte:



Alguém sabe me dizer o que poderia ser?

[]s


Rafael Britto A. Martins
http://rafaelmartinsjava.blogspot.com


"Um homem forte se defende sozinho, o homem mais forte defende os outros."
[Email] [WWW] [MSN]
davidbuzatto
Forum Spammer
[Avatar]

Membro desde: 07/08/2004 23:47:57
Mensagens: 2095
Localização: São Carlos - SP
Offline

Bem, sua stored procedure existe? Sei que é uma pergunta idiota, mas...

Até mais!

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
[WWW]
rbamartins
JavaEvangelist
[Avatar]

Membro desde: 01/03/2007 16:10:11
Mensagens: 358
Localização: Salvador
Offline

davidbuzatto wrote:Bem, sua stored procedure existe? Sei que é uma pergunta idiota, mas...

Até mais!


Existe sim,

é a mesma que eu executo diretamente no TOAD do ORACLE.

Pesquisando mais aqui, eu acho que sei o que é já. Na verdade eu estava mandando minha classe executar uma função e uma função espera retorno.
O que vou tentar agora é criar uma procedure que receba os parametros que preciso passar a função e ela servir de ponte e chamar a função.

Não sei se poderia ser isso, vou testar ainda.

Caso alguém saiba o motivo, post aqui por favor.

Rafael Britto A. Martins
http://rafaelmartinsjava.blogspot.com


"Um homem forte se defende sozinho, o homem mais forte defende os outros."
[Email] [WWW] [MSN]
fabim
Forum Spammer
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1120
Localização: Vitoria - Espirito Santo
Offline

con.prepareCall("{call SCMBA_PROD.FUNC_UNIFICA_PACIENTE(?,?,?,?)}");

poderia ser substituido por:

con.prepareCall("{ ? = call SCMBA_PROD.FUNC_UNIFICA_PACIENTE(?,?,?,?)}");

callableStatement.registerOutputParameter( 1, OracleTypes.CURSOR ); // seu retorno da função

callableStatement.setLong( 2, umLongQualquer );
callableStatement.setLong( 3, umLongQualquer );
callableStatement.setString( 4, umaStringQualquer );
callableStatement.setTimestamp( 5, umTimestampQualquer );



se vc nao poe o ' ? = ', ele entende que nao tem retorno, entao entende que é um PROCEDIMENTO. Imagino que seja isso

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
rbamartins
JavaEvangelist
[Avatar]

Membro desde: 01/03/2007 16:10:11
Mensagens: 358
Localização: Salvador
Offline

fabiocsi wrote:con.prepareCall("{call SCMBA_PROD.FUNC_UNIFICA_PACIENTE(?,?,?,?)}");

poderia ser substituido por:

con.prepareCall("{ ? = call SCMBA_PROD.FUNC_UNIFICA_PACIENTE(?,?,?,?)}");

callableStatement.registerOutputParameter( 1, OracleTypes.CURSOR ); // seu retorno da função

callableStatement.setLong( 2, umLongQualquer );
callableStatement.setLong( 3, umLongQualquer );
callableStatement.setString( 4, umaStringQualquer );
callableStatement.setTimestamp( 5, umTimestampQualquer );



se vc nao poe o ' ? = ', ele entende que nao tem retorno, entao entende que é um PROCEDIMENTO. Imagino que seja isso


fabiocsi, amanhã quando voltar para o trabalho vou testar do modo que você citou.

Mas, a forma que eu citei no post anterior, criando uma PROCEDURE (que não tem retorno) que recebesse os parametros necessarios e servisse de ponte, repassando, para minha FUNÇÃO funcionou perfeitamente.

Vou tentar do seu modo, pois o que eu fiz foi uma meia gambiarra pra falar a verdade.

abração e obrigado pela dica.

Rafael Britto A. Martins
http://rafaelmartinsjava.blogspot.com


"Um homem forte se defende sozinho, o homem mais forte defende os outros."
[Email] [WWW] [MSN]
rbamartins
JavaEvangelist
[Avatar]

Membro desde: 01/03/2007 16:10:11
Mensagens: 358
Localização: Salvador
Offline

fabiocsi

não consegui fazer da forma que vc falou.
Ele não reconhece o OracleTypes..

Estou fazendo da forma que já falei antes. Criei uma procedure, passo os parametros para ela que repassa para a função.



Abraços

Rafael Britto A. Martins
http://rafaelmartinsjava.blogspot.com


"Um homem forte se defende sozinho, o homem mais forte defende os outros."
[Email] [WWW] [MSN]
bernardo.rafael
Debugger
[Avatar]

Membro desde: 02/06/2006 08:03:51
Mensagens: 66
Offline

O problema pode ser o seguinte:
O Owner da Tabela não é o mesmo usuário que vc usa para conectar ao banco de dados. Nesses casos, você que informar sob qual "schema" está a procedure. Além disso, o usuário deve ter direitos de acesso ao "schema" tbm...

Dessa forma:


Dê uma olhada na documentação da Oracle
- http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/toc.htm
- http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/basic.htm#i1008346

-------------------------------------------
Abraços.
Rafael Bernardo
[Email] [MSN]
rbamartins
JavaEvangelist
[Avatar]

Membro desde: 01/03/2007 16:10:11
Mensagens: 358
Localização: Salvador
Offline



Valeu bernardo.rafael, por incrivel que pareça eu não havia encontrado essa documentação da Oracle.

Abraços

Rafael Britto A. Martins
http://rafaelmartinsjava.blogspot.com


"Um homem forte se defende sozinho, o homem mais forte defende os outros."
[Email] [WWW] [MSN]
fabim
Forum Spammer
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1120
Localização: Vitoria - Espirito Santo
Offline

O "OracleTypes.CURSOR" foi só um exemplo, pro caso da sua função retornar um cursor com varios registros por exemplo... mas poderia ser qqer tipo de dados.

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team