Re: Exception while executing function with CallableStatement - Mailing list pgsql-jdbc

From Andrew Lazarus
Subject Re: Exception while executing function with CallableStatement
Date
Msg-id 00ae01c404cd$3bfb2ca0$847ba8c0@ANDYXP
Whole thread Raw
In response to Exception while executing function with CallableStatement  ("Philip A. Chapman" <pchapman@pcsw.us>)
List pgsql-jdbc
Not being one of the list gurus, I don't know why it throws (sounds like a bug), but as a workaround does it work to use casts like
 
("{ ? = call InsTimeLog ( ?, ?, ?, ?, ?::integer, ?, ?::varchar, ?::int ) }");
 
(or whatever is the correct type ordering).
 
----- Original Message -----
Sent: Sunday, March 07, 2004 8:44 PM
Subject: [JDBC] Exception while executing function with CallableStatement

Everyone,
 
I have the following function set up in the database:
 
CREATE FUNCTION
    InsTimeLog
(
    INTEGER, -- ProjectID
    INTEGER, -- PersonellID
    INTEGER, -- FeeTypeCode
    DATE, -- LogDate
    INTEGER, -- Hours Logged
    INTEGER, -- Minutes Logged
    INTEGER, -- InvoiceID
    VARCHAR(30) -- Comment
) RETURNS INT4 -- ProjectID
AS
  'DECLARE
        pProjectID ALIAS FOR $1;
        pPersonellID ALIAS FOR $2;
        pFeeTypeCode ALIAS FOR $3;
        pLogDate ALIAS FOR $4;
        pHoursLogged ALIAS FOR $5;
        pMinutesLogged ALIAS FOR $6;
        pInvoiceID ALIAS FOR $7;
        pComment ALIAS FOR $8;
        vID INT4;
    BEGIN
        --- Insert the new record
        INSERT INTO
            TimeLog
        (
            ProjectID,
            PersonellID,
            FeeTypeCode,
            LogDate,
            HoursLogged,
            MinutesLogged,
            InvoiceID,
            Comment
        ) VALUES (
            pProjectID,
            pPersonellID,
            pFeeTypeCode,
            pLogDate,
            pHoursLogged,
            pMinutesLogged,
            pInvoiceID,
            pComment
        );
        --- Return the ID of the newly inserted record
        SELECT last_value INTO id FROM timelog_timelogid_seq;
        RETURN vID;
    END;'
LANGUAGE 'plpgsql';
 
The following Java code is used to execute the function:

CallableStatement proc = con.prepareCall
 ("{ ? = call InsTimeLog ( ?, ?, ?, ?, ?, ?, ?, ? ) }");
proc.registerOutParameter(1, Types.INTEGER);
proc.setInt(2, getProjectID());
proc.setInt(3, getPersonellID());
proc.setInt(4, getFeeTypeCode().getLookupID());
proc.setDate(5, getLogDate());
proc.setInt(6, getHours());
proc.setInt(7, getMinutes());
if (getInvoiceID() > 0) {
 proc.setInt(8, getInvoiceID());
} else {
 proc.setNull(8, Types.INTEGER);
}
if (getComment() == null) {
 proc.setNull(9, Types.VARCHAR);

} else {
 proc.setString(9, getComment());
}
proc.execute();
newID = proc.getInt(1);
proc.close();

When the 8th and 9th parameters are set to null, I get the following error:

org.postgresql.util.PSQLException: ERROR: function instimelog(integer, integer,
integer, "unknown", integer, integer, "unknown", "unknown") does not exist

Since I'm setting the type using Types.INTEGER and Types.VARCHAR, I do not know why the exception is listing the types for the eight and nineth fields as "unknown".  I would appreciate any help.

Thanks,

pgsql-jdbc by date:

Previous
From: "Philip A. Chapman"
Date:
Subject: Exception while executing function with CallableStatement
Next
From: Kris Jurka
Date:
Subject: Re: Exception while executing function with CallableStatement