Retorno de store procedure no postgres

5 respostas
indivito

ae galera,

to com o seguinte problema

tenho a seguinte procedure no postgres 8:

CREATE OR REPLACE FUNCTION f_ver_cliente(int4)
  RETURNS SETOF cliente AS
'SELECT * FROM cliente WHERE cod_cli = $1;'
  LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION f_ver_cliente(int4) OWNER TO postgres;

e tenho a seguinte chamada de uma store procedure do postgres que retorna um ResultSet

CallableStatement proc = conn.prepareCall( "{ ? = call f_ver_cliente(?) }");
			proc.registerOutParameter(1, Types.OTHER);
			proc.setInt(2, 5);
			proc.execute();
			
			ResultSet rs = (ResultSet) proc.getObject(1);

daí ele da o seguinte erro:

Erro na listagem de cliente: Uma Função foi executada e o retorno foi do tipo java.sql.Types=4 contudo tipo java.sql.Types=1111 foi registrado.

daí eu mudei pra isso:

CallableStatement proc = conn.prepareCall( "{ ? = call f_ver_cliente(?) }");
			[b]proc.registerOutParameter(1, Types.INTEGER);[/b]
			proc.setInt(2, 5);
			proc.execute();
			
			[b]Integer i = (Integer ) proc.getObject(1);[/b]
                        System.out.println(i);

e ele imprime no System.out no valor que eu passei como o parametro e que neste exemplo é 5.
quando era pra ele retornar o resultset com as informaçoes do cliente.
alguem tem alguma noção do que pode ser?

é urgente, tenho que entregar isso segunda-feira. qualquer ajuda é bem vinda.

vlw!

5 Respostas

danieldestro

proc.registerOutParameter(1, 1111);

indivito

cara esse proc.registerOutParameter(1, 1111); 111 é o Types.OTHER
e o 4 que ele diz que é necessario é o Types.INTEGER
mas quando eu coloco o Types.INTEGER ele da a seguinte axceçao:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer	at main.main(main.java:99)

e agora? faço oq?

danieldestro

No Oracle vc tem que usar OracleTyper.CURSOR. Veja se tem algo pro seu driver.

indivito

isso eu vi no google.
só que nao achei nada do tipo pro drive do postgres: org.postgresql.Driver;

nem na api dele tinha dizendo nada.
karaka, e agora?

:evil:

juniorsatanas

Após 5 anos você descobriu a resposta ?

Criado 8 de julho de 2005
Ultima resposta 19 de jul. de 2010
Respostas 5
Participantes 3