Java &引用;当没有预期结果时,返回了一个结果";执行JDBCTemplate更新时出现异常
我试图通过postgresql update()方法执行函数,但它引发了一个异常——“当没有预期结果时返回了一个结果” PostgreSQL函数:Java &引用;当没有预期结果时,返回了一个结果";执行JDBCTemplate更新时出现异常,java,spring,postgresql,Java,Spring,Postgresql,我试图通过postgresql update()方法执行函数,但它引发了一个异常——“当没有预期结果时返回了一个结果” PostgreSQL函数: CREATE OR REPLACE FUNCTION create_order(note VARCHAR, created_by BIGINT, service_request BIGINT) RETURNS TABLE (service_order integer, note varchar) BEGIN INSERT INTO servic
CREATE OR REPLACE FUNCTION create_order(note VARCHAR, created_by BIGINT, service_request BIGINT)
RETURNS TABLE (service_order integer, note varchar)
BEGIN
INSERT INTO service_order
(note, service_request_fk, created_by, so_status_type_fk, price_total, created)
VALUES (note, service_request, created_by, 1, 0, now());
END;
$$ LANGUAGE plpgsql;
int id = jdbc.update(sql, new Object[] {order.getNote(), emp.getEmployeeId(), order.getServiceRequestId()});
我正在尝试执行的SQL:
String sql = "SELECT create_order(?,?,?)";
更新功能:
CREATE OR REPLACE FUNCTION create_order(note VARCHAR, created_by BIGINT, service_request BIGINT)
RETURNS TABLE (service_order integer, note varchar)
BEGIN
INSERT INTO service_order
(note, service_request_fk, created_by, so_status_type_fk, price_total, created)
VALUES (note, service_request, created_by, 1, 0, now());
END;
$$ LANGUAGE plpgsql;
int id = jdbc.update(sql, new Object[] {order.getNote(), emp.getEmployeeId(), order.getServiceRequestId()});
函数必须返回空格,这意味着什么,但在我看来,它返回没有行的表,JBCDCAMPLE被认为是一个表。
如何避免此异常?在实际使用存储过程时,您使用的是select语句;你必须用电话
9.6中没有调用,因此无法运行。
从PostgreSQL 9开始,没有
调用
命令,因此您必须使用选择
。使用SELECT func_name()调用存储过程或函数
将返回一条记录
。要返回列或表
,必须将语法更改为SELECT*FROM func_name()代码>您可以通过使用DO
和PERFORM
来解决此问题:
final var sql = "DO $$" +
" BEGIN" +
" PERFORM create_order(:note,:employeeId,:requestId);" +
" END;" +
"$$";
entityManager.createNativeQuery(sql)
.setParameter("note", order.getNote())
.setParameter("employeeId", emp.getEmployeeId())
.setParameter("requestId", order.getServiceRequestId())
.executeUpdate();
9.6中没有调用,因此它不起作用。