Java org.postgresql.util.psqleexception:偏移量1处的函数或过程转义语法格式错误
目前,我面临通过DAO类中的JDBC获取postgresql函数数据的问题。连接正在正确建立Java org.postgresql.util.psqleexception:偏移量1处的函数或过程转义语法格式错误,java,postgresql,jdbc,Java,Postgresql,Jdbc,目前,我面临通过DAO类中的JDBC获取postgresql函数数据的问题。连接正在正确建立 CallableStatement mngStatement = conn .prepareCall("{? = CALL SELECT_SEARCH_DETAILS(?,?,?,?,?,?,?,?)}"); mngStatement.registerOutParameter(1, Types.VARCHAR); mngState
CallableStatement mngStatement = conn
.prepareCall("{? = CALL SELECT_SEARCH_DETAILS(?,?,?,?,?,?,?,?)}");
mngStatement.registerOutParameter(1, Types.VARCHAR);
mngStatement.setString(2,abc.getContractNumber());
mngStatement.setString(3,abc.getOrderNumber());
mngStatement.setString(4,abc.getShipmentNumber());
mngStatement.setString(5,abc.getShipmentControlNo());
mngStatement.setString(6,abc.getStatusFromDate());
mngStatement.setString(7,abc.getStatusToDate());
mngStatement.setString(8,abc.getSourceSystem());
mngStatement.setString(9,abc.getDestinationSystem());
mngStatement.execute();
rs = (ResultSet) mngStatement.getObject(1);
获取错误,如:
org.postgresql.util.PSQLException:函数或过程格式错误
偏移量1处的转义语法
请帮我提一下你的建议。提前谢谢
功能:
FUNCTION SELECT_SEARCH_DETAILS(
IN P_CONTARCT_NUM character varying,
IN P_ORDER_NUM character varying,
IN P_SHIPMENT_NUM character varying,
IN P_SHIP_CON_NUM character varying,
IN P_FROM_DATE character varying,
IN P_TO_DATE character varying,
IN P_SOURCE_SYSTEM character varying,
IN P_DESTINATION_SYSTEM character varying)
RETURNS table(CONTRACT_NUMBER text,ORDER_NUMBER text, SHIPMENT_NUMBER text, SCN text, STATUS_CODE text,STATUS_DATE text, LAST_UPDATE_DATE text, SOURCE_SYSTEM text, DESTINATION_SYSTEM text, RFID_FOLLOW_ON_CODE text, UID_INDICATOR text, IVC_SHIPMENT_SEQ_ID text) AS
$BODY$
您不需要
CallableStatement
使用常规的PreparedStatement
和select
语句
当函数返回一个表(“集合”)时,您需要使用:
select * from SELECT_SEARCH_DETAILS(...);
因此,完整代码如下所示:
PreparedStatement pstmt = conn.prepareStatement("select * from SELECT_SEARCH_DETAILS(?,?,?,?,?,?,?,?)");
pstmt.setString(1, abc.getContractNumber());
pstmt.setString(2, abc.getOrderNumber());
pstmt.setString(3, abc.getShipmentNumber());
pstmt.setString(4, abc.getShipmentControlNo());
pstmt.setString(5, abc.getStatusFromDate());
pstmt.setString(6, abc.getStatusToDate());
pstmt.setString(7, abc.getSourceSystem());
pstmt.setString(8, abc.getDestinationSystem());
ResultSet rs = pstmt.executeQuery();
您不需要
CallableStatement
使用常规的PreparedStatement
和select
语句
当函数返回一个表(“集合”)时,您需要使用:
select * from SELECT_SEARCH_DETAILS(...);
因此,完整代码如下所示:
PreparedStatement pstmt = conn.prepareStatement("select * from SELECT_SEARCH_DETAILS(?,?,?,?,?,?,?,?)");
pstmt.setString(1, abc.getContractNumber());
pstmt.setString(2, abc.getOrderNumber());
pstmt.setString(3, abc.getShipmentNumber());
pstmt.setString(4, abc.getShipmentControlNo());
pstmt.setString(5, abc.getStatusFromDate());
pstmt.setString(6, abc.getStatusToDate());
pstmt.setString(7, abc.getSourceSystem());
pstmt.setString(8, abc.getDestinationSystem());
ResultSet rs = pstmt.executeQuery();
您的存储过程是什么样子的?嗨,berger,我已经更新了问题中的函数体。正如有人在评论中建议的那样,您可以尝试使用小写的
调用吗?
?小写的“调用”仍然会出现相同的错误。现在我遇到如下错误:“org.postgresql.util.psqleException:执行CallableStatement时参数数量无效“。但我没有发现任何不匹配。您的存储过程是什么样子的?嗨,伯杰,我已经更新了问题中的函数体。正如有人在评论中建议的那样,您可以尝试使用小写的调用
?小写的“调用”仍然会出现相同的错误。现在我遇到如下错误:“org.postgresql.util.psqleException:执行CallableStatement时使用的参数数无效”。但我在这里没有发现任何不匹配。