Nous avons récemment basculé sur l'utilisation postgresql (EnterpriseDB), et je me suis déplacé sur une fonction, mais quand je le lance je reçois:Erreur lors de l'exécution de la fonction postgresql java
com.edb.util.PSQLException: ERROR: bind message has 2 result formats but query has 1 columns
La fonction est:
CREATE OR REPLACE FUNCTION receive_item(qtyexpected integer, qtyrcvd integer, reasoncd character varying, commenttext character varying, whs character varying, rcvrnbr character varying, ponbr character varying, itemid character varying) RETURNS integer AS
$BODY$
rcvrDtlId integer;
begin
rcvrDtlId := 0;
begin
update rcvr_dtl set
qty_expected = qtyExpected, qty_received = qty_received + qtyRcvd, reason_cd = reasonCd, comments = commentText
where warehouse = whs and rcvr_nbr = rcvrNbr and po_nbr = poNbr and item_nbr = itemId
returning rcvr_dtl_id into rcvrDtlId;
exception
when no_data_found then
null;
end;
return rcvrDtlId;
end$BODY$
LANGUAGE edbspl VOLATILE NOT LEAKPROOF
COST 100;
Et il est appelé avec:
sql= "{? = CALL receive_item(?,?,?,?,?,?,?,?)}";
m_ReceiveItem = m_Conn.prepareCall(sql);
m_ReceiveItem.registerOutParameter(1, Types.INTEGER);
m_ReceiveItem.setInt(2, msg.getQtyExpected());
m_ReceiveItem.setInt(3, msg.getQtyReceived());
m_ReceiveItem.setString(4, msg.getReasonCode());
m_ReceiveItem.setString(5, msg.getComments());
m_ReceiveItem.setString(6, msg.getFacilityNbr());
m_ReceiveItem.setString(7, msg.getRcvrNbr());
m_ReceiveItem.setString(8, msg.getPoNbr());
m_ReceiveItem.setString(9, msg.getSku());
m_ReceiveItem.execute();
rcvrDtlId = m_ReceiveItem.getInt(1);
Je ne peux pas semble trouver des informations sur cette erreur qui se rapporte de quelque manière que. Pourquoi cette erreur se produirait-elle pour le code ci-dessus?
En fait, l'erreur semble être spécifique au pilote de EDB (cette chaîne n'existe pas dans la source des pilotes postgres normal java). Si vous échangez le pilote edb pour le pilote JDBC de vanilla postgres, cela fonctionne-t-il? EnterpriseDB ne libère pas leur source Je ne pense pas pour le pilote, si difficile d'avoir un coup d'oeil pour voir ce qui se passe. –