Mam następującą procedurę zapisaną w PostgreSQL 9.3, która działa idealnie:
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;
W rzeczywistości, kiedy wykonuję select getColor(2)
w pgAdmin otrzymuję oczekiwaną wartość. Próbuję to tak nazwać z Java (wersja uproszczona):
String call = "{ call getColor(?,?) }";
CallableStatement cstmt = connection.prepareCall(call);
cstmt.setInt(1, 2);
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
boolean hadResults = cstmt.execute();
Problemem jest hadResults
jest zawsze zerowy. Jakieś pomysły?
Odpowiedzi:
0 dla odpowiedzi № 1Koncepcja procedur przechowywanych Postgresql jest czymśróżni się od innych dostawców, takich jak Oracle. Zasadniczo to, co w Oracle nazywa się procedurą składowania w Postgresql, może być funkcją, a wywołanie funkcji w Javie lepiej jest użyć instrukcji przygotowania i metod executeQuery, jak w poniższym przykładzie
String call = "select getColor(?)";
PreparedStatement pstmt = connection.prepareStatement(call);
pstmt.setInt(1,1);
Resultset resultset = pstmt.executeQuery();
Dziękuję wszystkim, którzy pomogli w komentarzach do pytania!