Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;当没有预期结果时,返回了一个结果";执行JDBCTemplate更新时出现异常_Java_Spring_Postgresql - Fatal编程技术网

Java &引用;当没有预期结果时,返回了一个结果";执行JDBCTemplate更新时出现异常

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

我试图通过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;
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中没有调用,因此它不起作用。