我想调用一个执行更新(语言sql,返回void)的PL/pgSQL函数。我得到这个异常:JPA和PostgreSQL:如何调用带有void返回类型的存储过程?
Internal Exception: org.postgresql.util.PSQLException: A result was returned when none was expected.
的persistence.xml:
<named-native-query name="Clinic.deactivateByNotFoundInIncomingClinic">
<query>
<![CDATA[
select apply_incoming_clinic_deletions(?)
]]>
</query>
</named-native-query>
DAO:
public void deactivateByNotFoundInIncomingClinic(long clinicSystemId)
{
em.createNamedQuery("Clinic.deactivateByNotFoundInIncomingClinic")
.setParameter(1, clinicSystemId)
.executeUpdate();
}
帮助!
更新:
使用EclipeseLink在GlassFish 3.1.1通过PostgreSQL的9.0-801 JDBC驱动程序4交谈的PostgreSQL数据库9.0。
如果你可以直接运行SQL语句(psql或pgAdminII我),您可以将问题与数据库或中间代码隔离。其他要检查的内容:函数的返回值是否与声明的返回类型相匹配?尽管出现错误消息,是否执行更新? JPA和PostgreSQL是最新的吗?您是否尝试增加日志级别或调试级别以获取更多信息? –
@Catcall请再次阅读该问题。该函数没有返回类型。 SQL语句('select apply_incoming_clinic_deletions(1)')运行得很好。 –
该函数具有返回类型;它的类型是'void'。在函数返回(或试图返回)非声明类型的东西时,早期版本的PostgreSQL中有相同的错误消息。 –