Hello,
I just noticed the following:
Using this sample function from the manual:
CREATE FUNCTION sum_n_product(x int, y int, OUT sum int, OUT prod int) AS $$
BEGIN
sum := x + y;
prod := x * y;
END;
$$ LANGUAGE plpgsql;
When calling this through JDBC, the following works without problems:
cstmt = connection.prepareCall("{call sum_n_product(?,?,?,?)}");
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.setInt(1, 2);
cstmt.setInt(2, 5);
cstmt.execute();
int x1 = cstmt.getInt(3);
int x2 = cstmt.getInt(4);
System.out.println("x1: " + x1);
System.out.println("x2: " + x2);
However when calling
ParameterMetaData meta = cstmt.getParameterMetaData();
after prepareCall() the following exception is thrown:
org.postgresql.util.PSQLException: ERROR: function sum_n_product(unknown, unknown, unknown, unknown) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Position: 15
Casting everything to integer ( "{call sum_n_product(?::int,?::int,?::int,?::int)}" ) produces the same error (except
thatthe parameter list shows integer in the exception message).
This looks like a bug to me. Why should getParameterMetaData() throw an exception if the call is valid and working?
Driver version is 9.4-1200
Postgres version is 9.4.2
Java version is 1.7.0_55
Regards
Thomas