JDBCTemplate 更新执行时出现“未预期结果时返回结果”异常

eat*_*nts 5 java postgresql spring

我正在尝试通过 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 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;
Run Code Online (Sandbox Code Playgroud)

SQL,我正在尝试执行:

String sql = "SELECT create_order(?,?,?)";
Run Code Online (Sandbox Code Playgroud)

更新功能:

int id = jdbc.update(sql, new Object[] {order.getNote(), emp.getEmployeeId(), order.getServiceRequestId()});
Run Code Online (Sandbox Code Playgroud)

该函数必须返回没有任何意义的 VOID,但在我看来,它返回没有行的表,JDBCTemplate 将其视为表。

我怎样才能避免这个异常?

小智 1

当您实际使用存储过程时,您正在使用 select 语句;您必须使用呼叫。

https://jdbc.postgresql.org/documentation/head/callproc.html