Chamando procedure Oracle via Java

11 respostas
C

Boa tarde

Pessoal eu tenho que chamar uma procedure do oracle pela aplicação java que estou desenvolvendo, mas fiz varios testes e não consigui realizar essa tarefa, minha procedure trabalha com dois dados de entrada: email e senha, e devolve 4 valores, segue a descrição dela :

  • p_USUARIO_LOGIN / VARCHAR2(150) / INPUT

  • p_USUARIO_SENHA / VARCHAR2(10) / INPUT

  • p_USUARIO_ID / NUMBER / OUT

  • p_USUARIO_TIPO_ID / NUMBER / OUT

  • p_USUARIO_NOME / VARCHAR(60) / OUT

  • p_MSG / VARCHAR2 / OUT

Será que alguem pode me ajudar a chamar ela pela aplicação…obrigado

valeu

11 Respostas

M

Caio, este topico vai me ajudar muito tambem. preciso da informação, estou amarrado em uma aplicação neste ponto.

V
...
CallableStatement cs = Connection.prepareCall("{ call seu_stored_procedure() }");
...
M

victorwss, vc pode dar um exemplo.

eu tenho esse metodo em meu bean:

public String insereWebServiceNfe() {

		try {

			Session s = HibernateUtil.getSession();
			System.out.println("Inserindo WebService...");

			NfeWebService nws = new NfeWebService();

			nws.setID_WEBSERVICE(this.idWebService);
			nws.setID_UF(this.idUf);
			nws.setNM_SERVICO(this.nmServico);
			nws.setURL(this.url);

			Transaction t = s.beginTransaction();

			s.save(nws);
			t.commit();
			s.close();
			System.out.println("WebService Feito.");

			return "okInsereWebServiceNfe";

		} catch (Exception e) {

			System.out.println(e.getMessage());

			return "erroInsereWebServiceNfe";

		}
	}

apos inserir o usuario com o hibernate, onde implemento o CallableStatement ?

obrigado desde já

C

Boa tarde

Tudo bem mateus, pelo que vi meu problema é mais simples que o seu, eu quero apenas passar parametros para procedure e conseguir ler os valores de retorno dela, tipo ela vai me retornar um resultset, mas esta dando problema na execução do método… alguem ai teria um exemplo desse tipo (Obs: O banco de dados é o oracle).

Valeu…

M

Tudo bem Caio.
Entao meu banco tb é Oracle.
Eu apenas preciso executar a SP que popula o campo id de minhas tabelas das tabelas.
Na verdade tabelas da empresa né. Pq por mim seria tudo viu sequence.rsss

[],s

_

Procurando no GUJ e no Google, achei isso:

http://www.guj.com.br/posts/list/82806.java

http://exampledepot.com/egs/java.sql/CallFunction.html

Vejam se serve…

J

Vou disponibilizar um código que chama uma procedure que recebe dois parametros um de entrada e outro de saida

CallableStatement cs = conexao.prepareCall( "{ call main(?,?) }" );
cs.setString(1, "VALOR DE ENTRADA");
// registro de saida
cs.registerOutParameter(2, OracleTypes.VARCHAR );
cs.execute();

String retorno = cs.getString(2);
C

Boa tarde

Então, eu fiz como você falou no exemplo mas não funcionou o erro que apareceu foi o seguinte:

ORA-06550: line 1, column 7:
PLS-00201: identifier ‘SP_TPT_AUTENTICACAO_GET’ must be declared

O meu metodo é o seguinte :

cs = conn.prepareCall("{call SP_TPT_AUTENTICACAO_GET(?,?,?,?,?,?)}");  
		
//Parametros de Entrada
cs.setString(1, email);
cs.setString(2, senha);  
		 
//Parametros de Saida
cs.registerOutParameter(3, OracleTypes.NUMBER);  
cs.registerOutParameter(4, OracleTypes.NUMBER); 
cs.registerOutParameter(5, OracleTypes.VARCHAR); 
cs.registerOutParameter(6, OracleTypes.VARCHAR); 
		
//Execução da procedure
cs.execute();   
		  
//Valor de retorno
String msg = cs.getString(6); 
		
return msg;

Sendo que e mail e senha são os parametros de entrada, a minha sequincia da procedure é:
sp_tpt_autenticacao_get(email, 'senha, v_id_usuario, v_id_tp_usuario, v_usuario_nome, v_msg);

Valeu…

J

A procedure está compilada no banco sem erros, ela está válida ?

Tenta executar ela na mão sem ser pelo Java e verifica se dar certo.
Pq o código que te passei tá correto, essa é a forma pra chamar um proc passando e recebendo parâmetros com o Oracle.

Pelo erro que está mostrando tô achando bem provável sua procedure estar com algum problema.

Você está conectando no banco correto.

C

Boa tarde

Então cara, funcionou agora era erro no banco de dados mesmo valeu, deixa eu te perguntar mais uma coisa com relação a chamada de uma procedure que me retorno um OUTCURSOR vc tem um exemplo de como seria feito, tipo:

P_ID_TIPO_USUARIO / NUMBER / INPUT – Parametro de entrada
OUTCURSOR / REF CURSOR / OUTPUT – retorno cursor

Essa procedure irá realizar um select e me devolver esse cursor como faço para trabalhar com esse cursor?

Valeu…

F

Olá

http://www.guj.com.br/posts/list/36103.java#191716

Criado 27 de junho de 2008
Ultima resposta 28 de jun. de 2008
Respostas 11
Participantes 6