Stored procedures

10 respostas
Marlise

ola galera!!

estou pegando um projeto em andamento,

aqui usamos procedures,

tudo depende do banco,

como faço pra usar essas procedures

alguem pode dar uma ajuda?

EDIT - o nome é “stored procedures” ou “procedimentos armazenados”.

10 Respostas

jaboot

Qual banco ?
Não se desespere, escreva de forma mais clara, tente ser mais abrangente no seu problema.

J

Segue exemplo para banco Oracle:

CallableStatement ctsmt = conexao.prepareCall("{call manter_clientes_package.MBUSCA_CIDADE(?,?,?,?)}");

ctsmt.setString(1, "nome da cidade");
ctsmt.registerOutParameter(2, Types.VARCHAR);
ctsmt.registerOutParameter(3, Types.VARCHAR);
ctsmt.registerOutParameter(4, Types.VARCHAR);

ctsmt.execute();

No exemplo acima é chamada uma procedure de banco Oracle situada dentro de uma package.

Dos 4 parâmetros, o primeiro é IN e os 3 últimos são OUT.

Para "pegar" o conteúdo dos 3 campos OUT use

ctsmt.getString(índice) onde índice vai de 2 a 4, nesse caso.

Para uma função com banco Oracle segue o exemplo:

CallableStatement ctsmt = conn.prepareCall("{? = call manter_clientes_package.FEXISTE_CPF(?,?)}");

ctsmt.registerOutParameter(1, Types.VARCHAR);
ctsmt.setString(2, pCoCpf);
ctsmt.registerOutParameter(3, Types.VARCHAR);

ctsmt.execute();

Onde o primeiro "?" identifica o resultado da função, tipo OUT recuperado por ctsmt.getString(1)

Nesse caso a função possui dois parâmetros, o primeiro IN e o segundo OUT.

Verifique os tipos de dados dos parâmetros para poder usar o setters respectivos. Campos varchar2 utilize setString, campos number utilize setInt e assim por diante.

Marlise

Meu banco é Oracle

obrigado pelas explicações,

estou incluindo um campo novo uma obs. em um cadartro,
fiz tudo que esplicaram,
quando vou salvar dá todas as mensagens de salvo com sucesso mas quando vou verificar ele não aparece lá,

não sei se falta fezer mais alguma coisa.

T

O Oracle, por padrão, requer que você use o comando COMMIT para que as alterações sejam efetivadas. (Você está usando o SQL*Plus ? )

J

Verifique se não faltou o comando conexao.commit().

São as procedures que salvam as informações no banco??

Marlise

foi isto que fiz,

public String emp_ins_obs(Employee_Param eparam, String employee_obs) throws Exception {

CallableStatement cstmt = null;

LoginUsuarioForm user_name = new LoginUsuarioForm();
try{
		
		conn = getConnection();			
		cstmt = conn.prepareCall("{ CALL PR_EMP_INS_OBS(?,?,?,?) }");

		
		
		cstmt.setLong(1, eparam.getCompany_code());
		cstmt.setLong(2, eparam.getEmployee_code());
		cstmt.setString(3,employee_obs);
		cstmt.setString(4,user_name.getUsuario());
		   
		//PARAMETRO DE SAIDA
		cstmt.registerOutParameter(5,OracleTypes.VARCHAR); //Return Code	
		cstmt.registerOutParameter(6,OracleTypes.VARCHAR); //Company_Return
		cstmt.registerOutParameter(7,OracleTypes.VARCHAR); //Employee_Return
		
		//executar a procedure
		cstmt.execute();	
		
		
		eparam.setEmployee_return_msg(cstmt.getString(9));
		
		return cstmt.getString(2).substring(0,1);
		
		
		
	}catch (Exception e){
		throw new Exception("EmployeeDAOImpl - pr_emp_ins_obs: " + e.getMessage());
	}finally{
		closeConnection(conn);
		closeCallableStatement(cstmt);
	}
}
Marlise

as procedures são feitas em PL

minha conexão é por um pool

J

Marlise, como é que é???

Aqui você tem 4 parâmetros de entrada certo?

cstmt = conn.prepareCall("{ CALL PR_EMP_INS_OBS(?,?,?,?) }");

Como é que você registra 3 parâmetros de saída com índices diferentes??

cstmt.registerOutParameter(5,OracleTypes.VARCHAR);
cstmt.registerOutParameter(6,OracleTypes.VARCHAR); 
cstmt.registerOutParameter(7,OracleTypes.VARCHAR);

Esqueci de colocar um exemplo com IN/OUT…

Caso os parâmetros sejam IN/OUT então você deve registrar os mesmo parâmetros de entrada como sendo de saída e com o mesmo índice.

Se os parâmetros IN/OUT são os 2, 3 e 4 você deve registrar como OutParameter os índices 2, 3 e 4.

Marlise

desculpe julianostr,

mas estou tentado aprender mas pelo que vi no meu projeto tá todo bixado eu não sei muita coisa mas estou corrend atras,

obrigado pela sua boa vontade

Marlise

Que erro é este?

SEVERE: Error starting endpoint

java.io.IOException: Cannot recover key

at org.apache.tomcat.util.net.jsse.JSSE14SocketFactory.init(JSSE14SocketFactory.java:125)

at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:88)

at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoint.java:292)

at org.apache.tomcat.util.net.PoolTcpEndpoint.startEndpoint(PoolTcpEndpoint.java:312)

at org.apache.coyote.http11.Http11Protocol.start(Http11Protocol.java:182)

at org.apache.catalina.connector.Connector.start(Connector.java:1001)

at org.apache.catalina.core.StandardService.start(StandardService.java:459)

at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)

at org.apache.catalina.startup.Catalina.start(Catalina.java:537)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)

04/05/2006 13:55:09 org.apache.catalina.startup.Catalina start

SEVERE: Catalina.start:

LifecycleException:  Protocol handler start failed: java.io.IOException: Cannot recover key

at org.apache.catalina.connector.Connector.start(Connector.java:1003)

at org.apache.catalina.core.StandardService.start(StandardService.java:459)

at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)

at org.apache.catalina.startup.Catalina.start(Catalina.java:537)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)

04/05/2006 13:55:09 org.apache.catalina.startup.Catalina start

INFO: Server startup in 6719 ms
Criado 4 de maio de 2006
Ultima resposta 4 de mai. de 2006
Respostas 10
Participantes 4