【问题标题】:Error when running postgresql function from java从java运行postgresql函数时出错
【发布时间】:2017-01-05 23:16:14
【问题描述】:

我们最近切换到使用 postgresql (enterpriseDB),我移动了一个函数,但是当我运行它时,我得到:

com.edb.util.PSQLException: ERROR: bind message has 2 result formats but query has 1 columns

函数是:

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;

它的调用方式是:

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);

我似乎找不到任何与此错误相关的信息。为什么上面的代码会出现这个错误?

【问题讨论】:

  • 实际上错误似乎特定于 edb 驱动程序(该字符串在普通 postgres java 驱动程序源中不存在)。如果您将 edb 驱动程序换成 vanilla postgres JDBC 驱动程序,它可以工作吗? EnterpriseDB 没有发布我不认为驱动程序的源代码,因此很难查看发生了什么。

标签: java postgresql enterprisedb


【解决方案1】:

我能够通过将语法从 ? = call... 语法切换到 select * from receive_item... 来解决这个问题

【讨论】:

  • PostgreSQL 不区分存储过程和用户​​定义函数。它们都被认为是相同的,它们都是通过 SELECT 访问的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
相关资源
最近更新 更多