Eu tenho o seguinte procedimento armazenado escrito no PostgreSQL 9.3 que está funcionando perfeitamente:
CREATE OR REPLACE FUNCTION getColor(i INT)
RETURNS VARCHAR AS $varColor$
DECLARE varColor varchar;
BEGIN
select color into varColor FROM colors where id = i;
return varColor;
END;
$varColor$ LANGUAGE plpgsql;
Na verdade, quando eu executo select getColor(2)
no pgAdmin eu recebo o valor esperado. Eu estou tentando chamá-lo assim de Java (versão simplificada):
String call = "{ call getColor(?,?) }";
CallableStatement cstmt = connection.prepareCall(call);
cstmt.setInt(1, 2);
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
boolean hadResults = cstmt.execute();
O problema é que hadResults
é sempre nulo. Alguma ideia?
Respostas:
0 para resposta № 1Postgresql stored procedures concept é algodiferente de outros fornecedores como o Oracle. Basicamente, o que no Oracle é chamado de store procedure no Postgresql pode ser uma função, e para chamar uma função em Java é melhor usar prepare statements e executeQuery, como no exemplo a seguir
String call = "select getColor(?)";
PreparedStatement pstmt = connection.prepareStatement(call);
pstmt.setInt(1,1);
Resultset resultset = pstmt.executeQuery();
Obrigado a todos os caras que ajudaram nos comentários da pergunta!